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网站上时,它正常工作。

谢谢。

URL中的点(.)字符错误

如果你知道编辑页面是你唯一使用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,猜猜看,它起作用了。