URL中的点(.)字符错误
本文关键字:字符 错误 URL | 更新日期: 2023-09-27 18:19:03
我有一个问题,当我点击编辑用户与此url在ASP.NET MVC 3
项目:http://domain.com: 8089/User/EditUser/username.surname ? idus = e11a621p - df11 - 4687 - 9903 - 8 bfc33c922cf
如果我得到另一个用户没有'。字符,它可以正常工作。
错误:
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部分的页面,你可以使用这个答案中描述的方法:
防止静态文件处理程序拦截类文件名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中的.
限制为特定路径。
在一些头痛之后,我再次将其发布到Azure WebSites
,它正常工作,具有相同的web。我在本地环境中使用的配置文件。所以解决方案必须在IIS
上,然后不再尝试后,我将Application Pool
更改为Default App Pool
,猜猜看,它起作用了。