ASP.NET MVC Colon in URL

2020-03-19 07:25发布

I've seen that IIS has a problem with letting colons into URLs. I also saw the suggestions others offered here.

With the site I'm working on, I want to be able to pass titles of movies, books, etc., into my URL, colon included, like this:

mysite.com/Movie/Bob:The Return

This would be consumed by my MovieController, for example, as a string and used further down the line.

I realize that a colon is not ideal. Does anyone have any other suggestions? As poor as it currently is, I'm doing a find-and-replace from all colons (:) to another character, then a backwards replace when I want to consume it on the Controller end.

5条回答
Ridiculous、
2楼-- · 2020-03-19 07:54

Consider URL encoding and decoding your movie titles.

You'd end up with foo.com/bar/Bob%58The%20Return

As an alternative, consider leveraging an HTML helper to remove URL unfriendly characters in URLs (method is URLFriendly()). The SEO benefits between a colon and a placeholder (e.g. a dash) would likely be negligable.

查看更多
神经病院院长
3楼-- · 2020-03-19 07:55

Colon is a reserved and invalid character in an URI according to the RFC 3986. So don't do something that violates the specification. You need to either URL encode it or use another character. And here's a nice blog post you might take a look at.

查看更多
Melony?
4楼-- · 2020-03-19 07:56

One of the biggest worries with your approach is that the movie name isn't always going to be unique (e.g. "The Italian Job"). Also what about other ilegal characters (e.g. brackets etc).

It might be a good idea to use an id number in the url to locate the movie in your database. You could still include a url friendly copy of movie name in your url, but you wouldn't need to worry about getting back to the original title with all the illegal characters in it.

A good example is the url to this page. You can see that removing the title of the page still works:

ASP.NET MVC Colon in URL

ASP.NET MVC Colon in URL

查看更多
对你真心纯属浪费
5楼-- · 2020-03-19 07:56

The simplest way is to use System.Web.HttpUtility.UrlEncode() when building the url and System.Web.HttpUtility.UrlDecode when interpreting the results coming back. You would also have problems with the space character if you don't encode the value first.

查看更多
【Aperson】
6楼-- · 2020-03-19 07:59

I resolved this issue by adding this to my web.config:

<httpRuntime requestPathInvalidCharacters=""/>

This must be within the system.web section.

The default is:

<httpRuntime requestPathInvalidCharacters="&lt;,&gt;,*,%,&amp;,:,\,?"/>

So to only make an exception for the colon it would become

<httpRuntime requestPathInvalidCharacters="&lt;,&gt;,*,%,&amp;,\,?"/>

Read more at: http://msdn.microsoft.com/en-us/library/system.web.configuration.httpruntimesection.requestpathinvalidcharacters.aspx

For what I understand the colon character is acceptable as an unencoded character in an URL. I don't know why they added it to the default of the requestPathInvalidCharacters.

查看更多
登录 后发表回答