繁体   English   中英

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

[英]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]属性下。


更新-web.config

我已经尝试了带<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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM