[英]ASP.NET MVC POST incorrectly returning HTTP 302
我四处张望,找不到答案。 我在ASP.NET MVC4中设置了一个简单的测试控制器,如下所示:
public class TestController {
[HttpGet]
public ActionResult Index() {
MyModel model = new MyModel();
model.Debug += "GET Method";
return View(model);
}
[HttpPost]
public ActionResult Post(MyModel model) {
model.Debug += "POST Method";
return View("Index", model);
}
}
Index视图仅具有一个表单和一个按钮,该表单和按钮将POST张贴到/ Test / Post,该表单应仅返回带有Index
视图的HTTP 200。 可以在笔记本电脑和服务器上按预期工作。 但是在主机提供商上,执行POST时得到以下信息:
POST /Test/Post returns HTTP 302 Redirect to /Test/Post (What the heck?)
GET /Test/Post returns HTTP 404
这怎么可能发生? 有解决此问题的想法吗?
我所知道的环境之间的唯一区别是,我已经安装了.NET 4.5,而他们已经安装了.NET 4.0(并且由于某些原因不会安装4.5。)尽管这些项目的目标是.NET 4,所以不要认为这有关系吗? 最初,我将它们定位为4.5,但是在得知服务器上未安装它之后将其更改。
搜索返回302的ASP.NET POST会引起很多有关由于登录而重定向的问题。 但是此控制器不在任何受限文件夹或[Authorize]
属性下。
我已经尝试了带<authorization>
和不带<authorization>
,无论哪种方式,结果都是一样的。 这是system.web,以防万一:
<system.web>
<customErrors mode="Off"/>
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Web.Helpers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</assemblies>
</compilation>
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="30"/>
</authentication>
<membership>
<providers>
<clear/>
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="Database" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/"/>
</providers>
</membership>
<pages controlRenderingCompatibilityVersion="4.0">
<namespaces>
<add namespace="System.Web.Helpers"/>
<add namespace="System.Web.Mvc"/>
<add namespace="System.Web.Mvc.Ajax"/>
<add namespace="System.Web.Mvc.Html"/>
<add namespace="System.Web.Routing"/>
<add namespace="System.Web.WebPages"/>
<add namespace="Microsoft.Web.Mvc"/>
<add namespace="Tenido.Domain"/>
<add namespace="Tenido.Web.Mvc.Controllers"/>
</namespaces>
</pages>
<httpModules>
<add name="ImageResizingModule" type="ImageResizer.InterceptModule"/>
</httpModules>
</system.web>
经过反复的反复,托管服务提供商使我注意到他们不支持ASP.NET MVC 4,最多不支持3。我不确定他们如何或为什么不支持较新的版本,但是那似乎是问题的根源。
不用说,我搬到了支持最新框架的主机上。 现在,该网站可以正常运行了。
在控制器方法中使用AllowAnonymous属性
[AllowAnonymous]
[HttpGet]
public ActionResult Index() {
MyModel model = new MyModel();
model.Debug += "GET Method";
return View(model);
}
希望能帮助到你
我有类似的问题。
帮助我的是从web.config中删除了<authorization>
标记。
不需要[Authorize]
属性并将302代码更改为404。
我有类似的问题。 从web.config中删除授权标签后,它对我有用。 不确定原因。
对我来说,我们通过web.config为自定义错误配置了错误重定向
<system.web>
...
<customErrors mode="On" defaultRedirect="~/error/errorpage">
...
</customErrors>
内部错误后,它正在执行302。 设置customErrors mode =“ Off”会将错误泡到浏览器。
如果使用基于cookie的身份验证,请确保为.AspNet.ApplicationCookie
(或任何名称)返回的cookie与您所在站点的域匹配
有时我发生的事情是Cookie域名对于我所在的网站不正确(由于我的笨拙的多托管环境老化),然后尽管发出了新的身份验证Cookie,浏览器仍无法在重定向期间将其发送回(因为这是一个不同的域),因此它将重定向回auth页面。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.