URL中的点(。)字符出错

时间:2014-08-21 14:42:00

标签: c# asp.net .net asp.net-mvc url

当我点击在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上时,它按预期工作。

感谢。

2 个答案:

答案 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并猜测它是什么,它有效。