iis-7 – ASP.NET MVC4在IIS7集成模式下不处理POST请求,但在IIS7.5中
|
我有一个有趣的情况我无法解释,我需要帮助弄清楚我的问题在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 – Html.Raw()在ASP.NET MVC Razor视图
- asp.net-mvc-4 – 我应该如何使用ReturnUrl = ViewBag.Retu
- asp.net-mvc – 无法通过kendo上传从一个视图到另一个视图的
- asp.net – 多租户应用程序的输出缓存,因主机名和文化而异
- asp.net-mvc – asp.net MVC中RavenDB中的多租户索引
- asp.net – 如何添加.aspx页面到现有的MVC 4项目?
- asp.net-web-api – ember-data:根据需要加载hasMany关联
- asp.net-mvc-3 – 默认模型绑定器没有绑定到字段的原因是什
- 如何在asp.net用户控件中使用jQuery ajax?
- asp.net – 如何使用MVC 4和View Models(强类型)渲染一组复
- 在asp.net中使用加密数据库联接字符串保证数据安
- asp.net – HTML敏捷包删除break标签关闭
- asp.net-mvc – 在IIS Express上设置SMTP
- asp.net-core – 如何使用.net Core设置离线开发
- asp.net – 在自动生成的GridView列中防止HTML编
- asp.net – 如果我没有指定targetFramework =“4
- asp.net – 在IIS上部署MVC应用程序时,我收到一个
- asp.net – 如何防止Entity Framework将FileStre
- 如何将旧版ASP应用程序转换为ASP.NET?
- asp.net – SqlException(0x80131904):第28行:
