当我点击在ASP.NET MVC 3
项目中使用此网址编辑用户时出现问题:
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 WebSite上时,它按预期工作。
感谢。
答案 0 :(得分:3)
如果您知道编辑页面是您使用firstname.lastname
网址部分的唯一页面,则可以使用此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" />
如果您在firstname.lastname
路径之外的网址中使用User/EditUser/...
,这是不够的,并且不是一般解决方案。这会复杂得多,因为您需要告诉IIS类似以下内容:
1)如果文件存在,请提供它(以便您的.js文件仍能正常运行)
2)在任何其他处理程序执行文件扩展名之前,运行MVC处理程序并查看是否存在与该URL匹配的路由。因为如果你有一个姓氏为html
的用户怎么办?
3)如果MVC处理程序与url的任何路由都不匹配,请让其他处理程序。如果您的项目中还有.aspx
页面怎么办?
最后,对于一般情况,您可能需要考虑恶意创建名为../../web
和姓氏为config
的用户的边缘情况?只是一个想法,但似乎你所希望的最好的是限制在网址中使用.
到特定路径。
答案 1 :(得分:0)
经过一番头痛之后,我再次将它发布到Azure WebSites
并且它正常工作,使用我在本地环境中使用的相同web.config文件。所以解决方案必须在IIS
上,然后在不再尝试之后,我将Application Pool
更改为Default App Pool
并猜测它是什么,它有效。