2010-12-08 4 views
22

私は誰にでも私に何か教えていただけますか?RedirectResultはMVCには新参者ですか?MVC RedirectResult

私はこれの間で異なっているかと思ったんだ。与えられたURLにHTTP redirectを実行するために使用される

public RedirectResult Index() 
{ 
    return new RedirectResult("http://www.google.com"); 
} 

答えて

49

public ActionResult Index() 
{ 
    return new RedirectResult("http://www.google.com"); 
} 

、これ。基本的には、302のステータスコードをレスポンスのLocationヘッダーと共に送信し、クライアントがこの新しいロケーションに新しいHTTP要求を発行するようにします。

通常あなたは明示的にコンストラクタを呼び出すのではなく、このようにそれを使用します。

public ActionResult Index() 
{ 
    return Redirect("http://www.google.com"); 
} 

は限り、あなたの2つのコードスニペットとの違いに関しては、まあ、それは関連MVCよりもC#の質問です。実際にはRedirectResultActionResultから派生しているため、両方とも有効な構文です。個人的に私はあなたが、たとえばビューを返すために、このリダイレクトを変更することを決定する可能性があるので最初の1好む:

public ActionResult Index() 
{ 
    return View(); 
} 

を、あなたが明示的に戻り値の型がRedirectResult代わりのActionResultであることを指定した場合、あなたは今それを修正する必要がありますViewResult(多分大したことではありませんが、それはあなたがしなければならない追加のステップです)。

+0

ありがとうございますが、私はRediectResultがActionResultから派生していることを知っていますが、まだ別のものがありますか?アクション結果の代わりにRedirectResultを再試行する必要があります。 – Stacker

+14

'ActionResult'は抽象クラスであり、返すことはできません。あなたは、コントローラアクションが何をしたいか(ビューのレンダリング、別のURLへのリダイレクト、JSONフォーマットされたデータの返却、ファイルのダウンロードなど)に応じて、ViewResult、RedirectResult、JsonResult、FileResult、JavaScriptResult、ContentResultなどの派生クラスを返します。 ..)。あなたのアクションメソッドのシグネチャに関する限り、私はあなたが私の答えで述べた理由のために常に戻り値の型として 'ActionResult'を持つことをお勧めします。 –

0

基本的に両方とも同じです。主なコンセプトは全て結果がアシオンの結果であることです。

将来のouで戻り値の型を変更したい場合は、アクション結果を使用することができます。