iis-7 – ASP.NET MVC4在IIS7集成模式下不处理POST请求,但在IIS7
我有一个有趣的情况我无法解释,我需要帮助弄清楚我的问题在IIS7上:
鉴于: > ASP.NET MVC 4 Web应用程序 请参阅以下控制器: public class ServiceController : Controller { public ActionResult Test() { return Content("Test"); } [HttpPost] public ActionResult Test2() { return Content("Test2"); } } 此外,在Global.asax中有以下代码: protected void Application_EndRequest() { if (Context.Response.StatusCode == 404) { ExecuteIndexPage(); } } protected void Application_Error(object sender,EventArgs e) { var error = Server.GetLastError(); ExceptionLogger.Log(error); ExecuteIndexPage(); } 所以,每当出现服务器错误时,都会记录下来.在这种情况下,在普通404的情况下,返回起始页.这工作(几乎)罚款.后来更多的 此设置在IIS7(Windows Server 2008,生产环境)和IIS7.5(Win7 Pro,开发环境和Windows Server 2008 R2,也是生产环境)上提供了非常不同的行为. 给定IIS中的以下配置(两个版本): > IIS中的Web使用集成模式ASP.NET 4应用程序池进行配置 在IIS 7.5中的行为是: > GET请求到/:返回索引页 在IIS 7中,行为是: > GET请求到/:返回索引页 所以IIS 7和IIS 7.5在使用GET请求时工作得很好,除非没有路由. 一旦我试图使用HTTP POST,IIS 7的工作比我想象的要小. 当POST请求时,IIS 7不会在我的应用程序中执行任何代码,并直接返回一个IIS 404页面. 所以我的问题是:为什么IIS 7拒绝在我的MVC 4应用程序中处理POST请求,我该怎么办才能处理post请求? 解决方法
我们想出来了 – 终于.
默认配置将其插入到web.config中: <system.webServer> <validation validateIntegratedModeConfiguration="false" /> <modules runAllManagedModulesForAllRequests="true" /> <handlers> <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" /> <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" /> <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%Microsoft.NETFrameworkv4.0.30319aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%Microsoft.NETFramework64v4.0.30319aspnet_isapi.dll" preCondition="classicMode,bitness64" responseBufferLimit="0" /> <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> </handlers> </system.webServer> 问题是“*”.路径,这将覆盖/test.aspx但不简单/测试. 如果将其更改为“*”,则所有请求将由ExtensionlessUrlHandler处理,包括将不再投放的静态文件. 所以解决办法是: <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,runtimeVersionv4.0" /> <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit_post" path="*" verb="POST" modules="IsapiModule" scriptProcessor="%windir%Microsoft.NETFrameworkv4.0.30319aspnet_isapi.dll" preCondition="classicMode,bitness32" responseBufferLimit="0" /> <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit_post" path="*" verb="POST" modules="IsapiModule" scriptProcessor="%windir%Microsoft.NETFramework64v4.0.30319aspnet_isapi.dll" preCondition="classicMode,bitness64" responseBufferLimit="0" /> <add name="ExtensionlessUrlHandler-Integrated-4.0_post" path="*" verb="POST" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 理想地删除您不需要的(x86和x64在经典与集成管道). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 如何在共享托管环境中实现ASP.Net MVC网站的
- 文件上传 – 是否可以在上传文件的asp.net webapi中进行模型
- “XmlDocumentationProvider”不实现接口成员“IDocumentat
- asp.net-web-api – Katana / OWIN Debugging&app.UseE
- asp.net-mvc-3 – 绑定到MVC3中的DropDownList
- 当我尝试添加映射文件时,ASP.NET脚手架的问题
- asp.net-mvc-3 – 将@helper代码转移到App_Code文件夹抛出错
- asp.net-mvc – 如何将ASP.net身份角色放入Identityserver4
- 如何在调用WCF服务之前弹出一个确认对话框?
- asp.net – CORS错误 – 请求的资源上没有“Access-Control
- asp.net-mvc-4 – 使用Bootstrap创建数据验证错误
- asp.net-mvc – 企业库日志记录 – 从格式中删除
- asp.net – 登录尝试后GoDaddy上的另一个安全例外
- asp.net – ScriptResource.axd和.Net 4
- ASP.NET:web.config在哪里/如何缓存?
- asp.net-mvc – 如何将XML作为POST传递给ASP MVC
- asp.net-mvc – 在@ Html.ActionLink中放置@ Htm
- ASP.NET Core技术研究-全面认识Web服务器Kestrel
- cors – 如何解决WebAPI OData Owin Ninject的处
- asp.net-mvc-4 – ASP.NET MVC 4.0 RC和Newsoft.