[英]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.