ASP.NET MVC Url中带点号出现404错误的解决方案
由于项目需求,项目的路由设计如下
config.Routes.MapHttpRoute(
name: "Get/Put Sku",
routeTemplate: "apiSets/{apiSetName}",
defaults: new { controller = "Sku" },
constraints: new { httpmethod = new HttpMethodConstraint(HttpMethod.Get, HttpMethod.Put) },
handler: authHandler
);
config.Routes.MapHttpRoute(
name: "Validate Sku",
routeTemplate: "apiSets/{apiSetName}/validate",
defaults: new { controller = "Sku" },
constraints: new { httpmethod = new HttpMethodConstraint(HttpMethod.Post) },
handler: authHandler
);
该路由设计会出现如下问题:
当Url中{apiSetName}对应位置出现点(.)的时候,Url将找不到可以匹配的路由,比如Url: ../apiSets/Bing.Search 将无法找到匹配的路由而报出404错误,参照http://stackoverflow.com/questions/11728846/dots-in-url-causes-404-with-asp-net-mvc-and-iis中网友的说法,在一般情况下,当在Url中最后的一块中出现点号(.)时,MVC将把它当做一个文件来处理,去查找相应的文件,找不到对应的文件就报404错误了。
但是Url: ../apiSets/Bing.Search/validate 可以正确的匹配路由,是因为点号(.)出现在Url的中间位置,不是最后一块,MVC不会将其作为文件处理。
现有两种方式可以解决这个问题:
1、在项目的web.config文件中做如下设置:
在<system.webServer></system.webServer>节点中添加如下代码:
<modules runAllManagedModulesForAllRequests="true"></modules>
这种方式是不推荐的,在 (1)http://bartwullems.blogspot.jp/2012/06/optimize-performance-of-your-web.html 和(2)http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html中都有提及。因为将runAllManagedModulesForAllRequests设置为true之后,将会使所有已注册的HTTP模块在每个请求上运行,而不仅仅是托管请求(例如.aspx)。 这意味着模块将运行在.jpg .gif .css .html .pdf等。这将导致资源的浪费,并且会引发其他的Error。
(推荐)2、在web.config中配置如下:
在<system.webServer></system.webServer>节点中添加如下代码:
<add name="ApiURIs-ISAPI-Integrated-4.0" path="*" type="System.Web.Handlers.TransferRequestHandler" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" preCondition="integratedMode,runtimeVersionv4.0" />
参考网址:
2.http://stackoverflow.com/questions/16581184/mvc4-404-errors
ASP.NET MVC Url中带点号出现404错误的解决方案的更多相关文章
- ASP.NET MVC, Url长度过长问题解决,404.15问题
最近在处理一个问题的时候,发现他们存在一个大量数据放在URL中传递的过程,当数据达到一定数量的时候就会报出404.15问题. 运行环境是在IIS8,经过查询之后发现,URL此时最大长度为2048,肯定 ...
- C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(中)
译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(中)),不对的地方欢迎指出与交流. 章节出自<Professional C# ...
- [转]在 ASP.NET MVC 4 中创建为移动设备优化的视图
原文链接 https://msdn.microsoft.com/zh-cn/magazine/dn296507.aspx 如果深入探讨有关编写移动设备网站的常识性考虑因素,会发现其中有一种内在矛盾. ...
- ASP.NET MVC URL重写与优化(1)-使用Global路由表定制URL
ASP.NET MVC URL重写与优化(1)-使用Global路由表定制URL 引言--- 在现今搜索引擎制霸天下的时代,我们不得不做一些东西来讨好爬虫,进而提示网站的排名来博得一个看得过去的流量. ...
- 在 ASP.NET MVC 应用中使用 NInject 注入 ASMX 类型的 Web Service
这几天,有同学问到为什么在 ASP.NET MVC 应用中,无法在 .ASMX 中使用 NInject 进行注入. 现象 比如,我们定义了一个接口,然后定义了一个实现. public interfac ...
- ASP.NET MVC URL重写与优化(进阶篇)-继承RouteBase
原文地址:http://www.51csharp.com/MVC/882.html ASP.NET MVC URL重写与优化(进阶篇)-继承RouteBase玩转URL 引言-- 在初级篇中,我们 ...
- 在 ASP.NET MVC 项目中使用 WebForm、 HTML
原文地址:http://www.cnblogs.com/snowdream/archive/2009/04/17/winforms-in-mvc.html ASP.NET MVC和WebForm各有各 ...
- 在已有的Asp.net MVC项目中引入Taurus.MVC
Taurus.MVC是一个优秀的框架,如果要应用到已有的Asp.net MVC项目中,需要修改一下. 1.前提约定: 走Taurus.MVC必须指定后缀.如.api 2.原项目修改如下: web.co ...
- 在ASP.NET MVC 框架中调用 html文件及解析get请求中的参数值
在ASP.NET MVC 框架中调用 html文件: public ActionResult Index() { using (StreamReader sr = new StreamReader(P ...
随机推荐
- MVC 5 的 EF6 Code First 入门 系列:排序、筛选和分页
这是微软官方SignalR 2.0教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译,这里是第三篇:排序.筛选 ...
- Ubuntu下安装Python绘图库Matplotlib的方法
在安装好Python的基础上, sudo apt-get install python-numpy sudo apt-get install python-scipy sudo apt-get ins ...
- Oracle组函数、多表查询、集合运算、数据库对象(序列、视图、约束、索引、同义词)等
count组函数:(过滤掉空的字段) select count(address),count(*) from b_user max() avg() min(),sum() select sum(age ...
- Net 4.0 之 Dynamic 动态类型
Net 4.0 之 Dynamic 动态类型 本文主要旨在与网友分享.Net4.0的Dynamic 对Duck Type 的支持. 一..net4.0主要新特性 .Net4.0在.Net3.5 ...
- Visual Studio 2013中的“Browser Link”
前几天,参加了,VS13的新特性的讲座,回来便试了一下, 默认Html会引用如下脚本: <!-- Visual Studio Browser Link --> <script typ ...
- [翻译]HBase 的 MVCC 和内建的原子操作
翻译一篇:HBase MVCC and built-in Atomic Operations 作者:Lars Hofhansl HBase 有一些特殊的原子操作: checkAndPut, check ...
- 了解mongoDB存储结构
mongoDB 深入浅出一 了解mongoDB存储结构 MongoDB 深入浅出 数据逻辑结构 1 mongoDB中的文档(document) 相当于 关系性数据库的一条一条的记录 2 colle ...
- 一个Shift的后门程序,可以让你可以进入你不知道密码的电脑
1.前提 你可以在平时亲身接触状态电脑,哪怕是在电脑主人不在的时候(虽然主人不在,或者关机了,进入电脑是要密码的). 2.原理 利用电脑连续按5次Shift会触发粘滞键,它会运行c:\winows\s ...
- 《剑指Offer》面试题-用两个栈实现队列
题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作.队列中的元素为int类型. 输入: 每个输入文件包含一个测试样例.对于每个测试样例,第一行输入一个n(1<=n<=100 ...
- 有一个array的数组,长度为10000,大小不一,用算法找出该数组中的最大值。
不用算法的答案是: var a=[1,2,3,5……];alert(Math.max.apply(null, a));//最大值alert(Math.min.apply(null, a));//最 ...