React to aspnet/Razor#684.
- Modified `UrlResolutionTagHelper` to utilize new CSS selector attributes to restrict when it applies. It now only appies to tags that have their values starting with `~/`. - `UrlResolutionTagHelper` no longer applies to dynamic content such as `href="@SomethingResultingInTildaSlash"`. - Updated tests to reflect new behavior.
This commit is contained in:
parent
f3740b2196
commit
5612ca845f
|
|
@ -21,35 +21,35 @@ namespace Microsoft.AspNetCore.Mvc.Razor.TagHelpers
|
|||
/// <remarks>Resolves URLs starting with '~/' (relative to the application's 'webroot' setting) that are not
|
||||
/// targeted by other <see cref="ITagHelper"/>s. Runs prior to other <see cref="ITagHelper"/>s to ensure
|
||||
/// application-relative URLs are resolved.</remarks>
|
||||
[HtmlTargetElement("*", Attributes = "itemid")]
|
||||
[HtmlTargetElement("a", Attributes = "href")]
|
||||
[HtmlTargetElement("applet", Attributes = "archive")]
|
||||
[HtmlTargetElement("area", Attributes = "href", TagStructure = TagStructure.WithoutEndTag)]
|
||||
[HtmlTargetElement("audio", Attributes = "src")]
|
||||
[HtmlTargetElement("base", Attributes = "href", TagStructure = TagStructure.WithoutEndTag)]
|
||||
[HtmlTargetElement("blockquote", Attributes = "cite")]
|
||||
[HtmlTargetElement("button", Attributes = "formaction")]
|
||||
[HtmlTargetElement("del", Attributes = "cite")]
|
||||
[HtmlTargetElement("embed", Attributes = "src", TagStructure = TagStructure.WithoutEndTag)]
|
||||
[HtmlTargetElement("form", Attributes = "action")]
|
||||
[HtmlTargetElement("html", Attributes = "manifest")]
|
||||
[HtmlTargetElement("iframe", Attributes = "src")]
|
||||
[HtmlTargetElement("img", Attributes = "src", TagStructure = TagStructure.WithoutEndTag)]
|
||||
[HtmlTargetElement("img", Attributes = "srcset", TagStructure = TagStructure.WithoutEndTag)]
|
||||
[HtmlTargetElement("input", Attributes = "src", TagStructure = TagStructure.WithoutEndTag)]
|
||||
[HtmlTargetElement("input", Attributes = "formaction", TagStructure = TagStructure.WithoutEndTag)]
|
||||
[HtmlTargetElement("ins", Attributes = "cite")]
|
||||
[HtmlTargetElement("link", Attributes = "href", TagStructure = TagStructure.WithoutEndTag)]
|
||||
[HtmlTargetElement("menuitem", Attributes = "icon")]
|
||||
[HtmlTargetElement("object", Attributes = "archive")]
|
||||
[HtmlTargetElement("object", Attributes = "data")]
|
||||
[HtmlTargetElement("q", Attributes = "cite")]
|
||||
[HtmlTargetElement("script", Attributes = "src")]
|
||||
[HtmlTargetElement("source", Attributes = "src", TagStructure = TagStructure.WithoutEndTag)]
|
||||
[HtmlTargetElement("source", Attributes = "srcset", TagStructure = TagStructure.WithoutEndTag)]
|
||||
[HtmlTargetElement("track", Attributes = "src", TagStructure = TagStructure.WithoutEndTag)]
|
||||
[HtmlTargetElement("video", Attributes = "src")]
|
||||
[HtmlTargetElement("video", Attributes = "poster")]
|
||||
[HtmlTargetElement("*", Attributes = "[itemid^='~/']")]
|
||||
[HtmlTargetElement("a", Attributes = "[href^='~/']")]
|
||||
[HtmlTargetElement("applet", Attributes = "[archive^='~/']")]
|
||||
[HtmlTargetElement("area", Attributes = "[href^='~/']", TagStructure = TagStructure.WithoutEndTag)]
|
||||
[HtmlTargetElement("audio", Attributes = "[src^='~/']")]
|
||||
[HtmlTargetElement("base", Attributes = "[href^='~/']", TagStructure = TagStructure.WithoutEndTag)]
|
||||
[HtmlTargetElement("blockquote", Attributes = "[cite^='~/']")]
|
||||
[HtmlTargetElement("button", Attributes = "[formaction^='~/']")]
|
||||
[HtmlTargetElement("del", Attributes = "[cite^='~/']")]
|
||||
[HtmlTargetElement("embed", Attributes = "[src^='~/']", TagStructure = TagStructure.WithoutEndTag)]
|
||||
[HtmlTargetElement("form", Attributes = "[action^='~/']")]
|
||||
[HtmlTargetElement("html", Attributes = "[manifest^='~/']")]
|
||||
[HtmlTargetElement("iframe", Attributes = "[src^='~/']")]
|
||||
[HtmlTargetElement("img", Attributes = "[src^='~/']", TagStructure = TagStructure.WithoutEndTag)]
|
||||
[HtmlTargetElement("img", Attributes = "[srcset^='~/']", TagStructure = TagStructure.WithoutEndTag)]
|
||||
[HtmlTargetElement("input", Attributes = "[src^='~/']", TagStructure = TagStructure.WithoutEndTag)]
|
||||
[HtmlTargetElement("input", Attributes = "[formaction^='~/']", TagStructure = TagStructure.WithoutEndTag)]
|
||||
[HtmlTargetElement("ins", Attributes = "[cite^='~/']")]
|
||||
[HtmlTargetElement("link", Attributes = "[href^='~/']", TagStructure = TagStructure.WithoutEndTag)]
|
||||
[HtmlTargetElement("menuitem", Attributes = "[icon^='~/']")]
|
||||
[HtmlTargetElement("object", Attributes = "[archive^='~/']")]
|
||||
[HtmlTargetElement("object", Attributes = "[data^='~/']")]
|
||||
[HtmlTargetElement("q", Attributes = "[cite^='~/']")]
|
||||
[HtmlTargetElement("script", Attributes = "[src^='~/']")]
|
||||
[HtmlTargetElement("source", Attributes = "[src^='~/']", TagStructure = TagStructure.WithoutEndTag)]
|
||||
[HtmlTargetElement("source", Attributes = "[srcset^='~/']", TagStructure = TagStructure.WithoutEndTag)]
|
||||
[HtmlTargetElement("track", Attributes = "[src^='~/']", TagStructure = TagStructure.WithoutEndTag)]
|
||||
[HtmlTargetElement("video", Attributes = "[src^='~/']")]
|
||||
[HtmlTargetElement("video", Attributes = "[poster^='~/']")]
|
||||
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||
public class UrlResolutionTagHelper : TagHelper
|
||||
{
|
||||
|
|
|
|||
|
|
@ -7,13 +7,13 @@
|
|||
<a href="HtmlEncode[[/]]Person">Person</a>
|
||||
<area href="HtmlEncode[[/]]Person/HtmlEncode[[John Doe]]" alt="Url stuff">
|
||||
<link href="HtmlEncode[[/]]Person/HtmlEncode[[John Doe]]/CSS" rel="stylesheet">
|
||||
<video poster="HtmlEncode[[~/SomeUrl]]" src="HtmlEncode[[~/SomeUrl]]/HtmlEncode[[video]]" />
|
||||
<video poster=HtmlEncode[[~/SomeUrl]] src='HtmlEncode[[~/SomeUrl]]/HtmlEncode[[video]]' />
|
||||
<audio src="HtmlEncode[[~/SomeUrl]]">
|
||||
<source src="HtmlEncode[[/]]Person" srcset="HtmlEncode[[/]]Person">
|
||||
<track src="HtmlEncode[[/]]emailHtmlEncode[[~/SomeUrl]]">
|
||||
</audio>
|
||||
<embed src="HtmlEncode[[/]]email@dyanmicUrl">
|
||||
<iframe src="HtmlEncode[[~/SomeUrl]]" />
|
||||
<iframe src=HtmlEncode[[~/SomeUrl]] />
|
||||
<img src="HtmlEncode[[/]]HtmlEncode[[John Doe]]" srcset="HtmlEncode[[/]]HtmlEncode[[John Doe]]">
|
||||
<script src="HtmlEncode[[/]]Person/HtmlEncode[[John Doe]]/JS"></script>
|
||||
<input src="HtmlEncode[[/]]/Person" itemscope itemid="HtmlEncode[[/]]Person" formaction="HtmlEncode[[~/SomeUrl]]">
|
||||
|
|
@ -27,7 +27,7 @@
|
|||
<menuitem icon="HtmlEncode[[/]]Person" />
|
||||
</menu>
|
||||
<object data="HtmlEncode[[/]]Person" archive="HtmlEncode[[/]]Person/HtmlEncode[[John Doe]]" data="HtmlEncode[[/]]Person" archive="HtmlEncode[[/]]Person/HtmlEncode[[John Doe]]" />
|
||||
<object archive="HtmlEncode[[/]]Person/HtmlEncode[[John Doe]]" />
|
||||
<object archive="~/Person/HtmlEncode[[John Doe]] " />
|
||||
<applet archive="HtmlEncode[[/]]A+Really(Crazy),Url.Is:This/HtmlEncode[[John Doe]]/Detail" />
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -7,13 +7,13 @@
|
|||
<a href="/Person">Person</a>
|
||||
<area href="/Person/John Doe" alt="Url stuff">
|
||||
<link href="/Person/John Doe/CSS" rel="stylesheet">
|
||||
<video poster="/SomeUrl" src="/SomeUrl/video" />
|
||||
<audio src="/SomeUrl">
|
||||
<video poster=~/SomeUrl src='~/SomeUrl/video' />
|
||||
<audio src="~/SomeUrl">
|
||||
<source src="/Person" srcset="/Person">
|
||||
<track src="/email~/SomeUrl">
|
||||
</audio>
|
||||
<embed src="/email@dyanmicUrl">
|
||||
<iframe src="/SomeUrl" />
|
||||
<iframe src=~/SomeUrl />
|
||||
<img src="/John Doe" srcset="/John Doe">
|
||||
<script src="/Person/John Doe/JS"></script>
|
||||
<input src="//Person" itemscope itemid="/Person" formaction="/SomeUrl">
|
||||
|
|
@ -27,7 +27,7 @@
|
|||
<menuitem icon="/Person" />
|
||||
</menu>
|
||||
<object data="/Person" archive="/Person/John Doe" data="/Person" archive="/Person/John Doe" />
|
||||
<object archive="/Person/John Doe" />
|
||||
<object archive="~/Person/John Doe " />
|
||||
<applet archive="/A+Really(Crazy),Url.Is:This/John Doe/Detail" />
|
||||
</body>
|
||||
</html>
|
||||
Loading…
Reference in New Issue