ASP.NET MVC POST错误地返回HTTP 302

时间:2013-12-03 04:58:09

标签: 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 ActionResult Post(MyModel model) {
        model.Debug += "POST Method";
        return View("Index", model);
    }
}

索引视图只有一个表单和一个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]属性下。


更新 - web.config的

无论有没有<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>

6 个答案:

答案 0 :(得分:4)

经过多次来回,托管服务提供商提请我注意他们不支持ASP.NET MVC 4,最多只支持3.我不确定他们不支持更新版本的方式或原因,但这似乎是问题的根源。

毋庸置疑,我转移到支持最近框架的主机。现在该网站运作良好。

答案 1 :(得分:1)

在控制器方法

中使用AllowAnonymous属性
[AllowAnonymous]
[HttpGet]
public ActionResult Index() {
    MyModel model = new MyModel();
    model.Debug += "GET Method";
    return View(model);
}

希望有所帮助

答案 2 :(得分:0)

我有类似的问题。

帮助我的是从web.config中删除<authorization>标记。

[Authorize]属性没有必要,并且将302更改为404代码。

答案 3 :(得分:0)

我有类似的问题。从web.config中删除Authorization标签后,它对我有用。不确定原因。

答案 4 :(得分:0)

对我来说,我们通过web.config

为自定义错误配置了错误重定向
<system.web> 
...  

 <customErrors mode="On" defaultRedirect="~/error/errorpage">
...

</customErrors>

内部错误后它正在执行302。设置customErrors mode =“Off”将错误一直冒泡到浏览器。

答案 5 :(得分:0)

如果使用基于cookie的身份验证,请确保为.AspNet.ApplicationCookie返回的cookie(或任何名称)与您所访问的站点的域相匹配

我有时会遇到的问题是,我所在的网站的Cookie域不正确(由于我的老龄化笨拙的多托管环境),因此尽管发布了新的身份验证Cookie,浏览器仍无法将其发回重定向期间(因为它是一个不同的域),因此它将重定向回auth页面。