当我在 ASP.NET MVC 3
项目中单击编辑具有此 url 的用户时遇到问题:
http://domain.com:8089/User/EditUser/username.surname?IDUser=e11a621p-df11-4687-9903-8bfc33c922cf
如果我得到另一个没有“.”的用户性格,效果很好。
错误:
HTTP Error 404.0 - Not Found
The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.
我尝试了一些在这里找到的提示,例如:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
和:
<system.web>
<httpRuntime relaxedUrlToFileSystemMapping="true" />
以及 edituser 操作上的此属性:
[ValidateInput(false)]
但似乎没有任何效果。该站点托管在 IIS 服务器上,当它位于 Windows Azure 网站上时,它按预期工作。
谢谢。
最佳答案
如果您知道编辑页面是唯一使用 firstname.lastname
url 部分的页面,则可以使用此 SO 答案中描述的方法:
Prevent static file handler from intercepting filename-like URL
具体来说,在您的情况下,添加以下 web.config 部分应该将请求路由到 MVC:
<system.webServer>
...
<handlers>
...
<add
name="userEditPage"
path="User/EditUser/*"
verb="GET"
type="System.Web.Handlers.TransferRequestHandler"
preCondition="integratedMode,runtimeVersionv4.0" />
如果您在 User/EditUser/...
路径之外的 URL 中使用 firstname.lastname
,这还不够,而且不是通用解决方案。这会复杂得多,因为您需要告诉 IIS 类似以下内容:
1) 如果文件存在,则提供该文件(以便您的 .js 文件仍能正常提供)
2) 在针对文件扩展名执行任何其他处理程序之前,运行 MVC 处理程序并查看是否有与 url 匹配的路由。因为如果您有一个姓氏 html
的用户怎么办?
3) 如果 MVC 处理程序与 url 的任何路由都不匹配,则让其他处理程序匹配。因为如果您的项目中还有 .aspx
页面怎么办?
最后,对于一般情况,您可能需要考虑有人恶意创建名字为 ../../web
和姓氏 config
的用户的边缘情况>?只是一个想法,但您所能希望的最好的结果似乎是将 url 中 .
的使用限制为特定路径。
关于c# - URL 中的点 (.) 字符错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25429281/