RedirectToAction
への私の電話はRedirectToActionPermanent
のように動作しています。つまり、単純に別のビューを表示するのではなく、URLが変更されています。RedirectToActionがURLを変更しています
編集:今、私はそれについて考えることを、恒久的なリダイレクトなど
RedirectToAction
通常行為。のように、これはおそらく正しい動作です。以下のコードでは、ModelState
が有効な場合、ユーザーに302のリダイレクトが戻されてインデックスに戻されます。しかし、RedirectToActionPermanent
のポイントは何ですか?
リダイレクトはHTTPエラー用です。私はHttpErrorsController
の特定のアクションメソッドにエラーを指すようにWeb.configを設定しました。これは、期待どおりに一時的なリダイレクトを表示することを含め、完全に動作します。 (https://localhost/ThisPageDoesntExist
にはエラーページが表示されますが、URLは同じです)
HttpStatusCodeResult
を返すか、HttpException
を返すと、どちらも期待通りに機能します。
しかし、RedirectToAction
を使用してエラー処理方法に一時的にリダイレクトしようとすると、ビューは正しく表示されますが、URLは変更されます。 https://localhost/HttpErrors/404
。
HttpErrorsController.cs
private ViewResult ErrorView(HttpStatusCode httpStatusCode, string shortDesc, string longDesc)
{
Response.StatusCode = (int)httpStatusCode;
return View("HttpError", new HttpErrorViewModel(httpStatusCode, shortDesc, longDesc));
}
[ActionName("404")]
public ActionResult Error404()
{
return ErrorView(HttpStatusCode.NotFound, "Not Found",
"The requested resource could not be found.");
}
// Other identical methods for each error
ItemController.cs
public ActionResult HttpError(HttpStatusCode status)
{
return RedirectToAction(((int)status).ToString(), "HttpErrors");
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(ItemViewModel viewModel)
{
if (!Request.IsAjaxRequest())
{
return HttpError(HttpStatusCode.NotAcceptable);
}
if (ModelState.IsValid)
{
db.Items.Add(pm);
db.SaveChanges();
return RedirectToAction("Index");
}
return PartialView("_Create", viewModel);
}
上記を書いて以来、私はそれはまた、引っ掛かりように私は、ちょうどHttpException
を投げオフ、おそらくより良いです実現してきましたELMAHによると、私はまだかなり上記の動作によって混乱しています。
ええ、私は、 'RedirectToAction'が常にこれを行うことを通知した後に気付きました。それについて私の編集を参照してください。ビューを直接返すことについては、私はそれについて考えましたが、他のコントローラーからそのアクションメソッドを呼び出す方法がわかりません。そして 'ItemController'の中で' View( "HttpError") 'を返すことはポイントを破るでしょう。 – Sinjai
カスタムエラーハンドラアトリビュート(あなたのエラーを処理する 'HandleErrorAttribute'から継承し、' OnException'メソッドでは、あなたが望むレスポンスを返すことができます) – Shyju
私が知る限り、自分でビューを指定する必要があります – Sinjai