C# ASP.NET MVC POST错误返回HTTP 302
我找遍了,找不到答案。我在ASP.NET MVC4中有一个简单的测试控制器,设置如下:C# ASP.NET MVC POST错误返回HTTP 302,c#,asp.net-mvc-4,http-post,http-status-code-302,C#,Asp.net Mvc 4,Http Post,Http Status Code 302,我找遍了,找不到答案。我在ASP.NET MVC4中有一个简单的测试控制器,设置如下: public class TestController { [HttpGet] public ActionResult Index() { MyModel model = new MyModel(); model.Debug += "GET Method"; return View(model); } [HttpPost]
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视图只有一个表单和一个按钮,用于发布到/Test/Post,该按钮应该只返回带有索引的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帖子会带来很多关于因登录而重定向的问题。但此控制器不在任何类型的受限文件夹或[Authorize]
属性下
更新-web.config的 我试过使用和不使用
,结果都一样。以下是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>
在控制器方法中使用AllowAnonymous属性
[AllowAnonymous]
[HttpGet]
public ActionResult Index() {
MyModel model = new MyModel();
model.Debug += "GET Method";
return View(model);
}
希望能有帮助我也有同样的问题 帮助我的是从web.config中删除
标记
不需要使用
[Authorize]
属性,并将302代码更改为404代码。经过多次往返之后,托管提供商提醒我,他们不支持ASP.NET MVC 4,最多只支持3个。我不知道他们是如何或者为什么不支持新版本的,但这似乎是问题的根源
不用说,我搬到了一个支持最新框架的主机上。现在这个网站运行得很好。我也有类似的问题。从web.config中删除授权标记后,它对我起了作用。不确定原因。对我来说,我们通过web.config为自定义错误配置了错误重定向
<system.web>
...
<customErrors mode="On" defaultRedirect="~/error/errorpage">
...
</customErrors>
...
...
它在内部错误后执行302。设置customErrors mode=“Off”会将错误一直冒泡到浏览器。如果使用基于cookie的身份验证,请确保为
.AspNet.applicationcokie
(或任何名称)返回的cookie与您所在站点的域相匹配
有时发生在我身上的事情是cookie域对于我所在的站点不正确(由于我的多主机环境老化),然后尽管发布了一个新的auth cookie,浏览器在重定向期间无法将其发送回(因为它是另一个域)因此,它会重定向回身份验证页面。您能在托管提供商服务器上启用任何跟踪吗?很遗憾,我不能启用跟踪。我确实提交了一份支持票,建议他们也这样做来帮助调试问题。那是8小时前的事了,希望很快能听到回音…提供商设置的框是否可以将HTTP重定向到HTTPS?此托管计划不包括HTTPS。您可以共享fiddler跟踪吗?尝试从web.config中删除,但仍然产生相同的结果。感谢您的想法,但仍然产生相同的结果。