簡體   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