c# - URL 中的点 (.) 字符错误

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

当我在 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/

相关文章:

c# - 替换 XML 文本的最佳方式

c# - `using` 带有未初始化变量的语句是不可能的,也不是最终的,那么如何正确处理呢?

c# - 如何在从 SqlDataReader 读取变量时定义变量(返回所有行)

c# - 无法转换为我的自定义 ConfigurationSection

c# - 数据表和 View 状态

asp.net - asp.net 中的 cookie 问题。值在 response.redirect 后恢复

c# - 在单词列表中查找 "hook words"的有效方法?

c# - 在 c# 控制台项目中使用 OneDrive SDK 进行身份验证

c# - 如何使用 C# 遍历注册表项?

asp.net - 防止用户在同一行上工作