2017-12-05 21 views
0

が、これはので、これらのルートはどのようにのasp.net MVC:ルートは

/Product/3 
/Product/8999 

に動作しますProductIDの

routes.MapRoute(
    "Product", 
    "Product/{productId}", 
    new {controller="Product", action="Details"}, 
    new {productId = @"\d+" } 
); 

ために整数データを期待して、私のルートであると仮定と一致しない場合、我々はHTTPステータスコードを設定することができます私はこのシナリオでフレンドリーなエラーメッセージを表示できる既存のビューにユーザーをリダイレクトできますか?

もう1つ私が知りたいことは、ユーザーが/Product/appleと入力したときに状態コードを設定できることです。このルートは一致しません。この場合、私はstatusCode="404"を設定するのが好きです。私がそれを行うことができる場合customErrors私はビューを指定した404エラーのために表示されます。私にそれをする方法を提案する?

<customErrors mode="Off" defaultRedirect="~/error.html"> 
    <error statusCode="403" redirect="~/access-denied.aspx" /> 
    <error statusCode="404" redirect="~/page-not-found.aspx" /> 
    <error statusCode="500" redirect="~/error.html" /> 
</customErrors> 

可能であればご案内ください。

+0

を助け

public ActionResult NotFound() { return HttpNotFound(); **// HERE you can redirect to specific html/razor view or static page as you wish** } 

ホープ・ '/製品/ apple'この要求は...あなたのルートで 2つのことを現在一致しませんあなたはすることができます... 1. productid正規表現を解析し、それを処理します 2.文字列に一致する新しいルートを追加し、perticularアクションを呼び出します。そのページの目的のリダイレクト –

答えて

0

あなたの現在の記載されているルートは、あなたが言った要求と一致しません。

このように2つのルートを追加することを検討する必要があります。

routes.MapRoute(
       "Product", 
       "Product/{productId}", 
       new { controller = "Product", action = "Details" }, 
       new { productId = @"\d+" } 
      ); 
      routes.MapRoute(
       "ProductNotMatched", 
       "Product/{productId}", 
       new { controller = "Product", action = "NotFound" }); 

/Product/appleが打撃を受けるだろうとき、これは今NotFoundアクションを呼び出します。

次のアクションを作成し、このようにそれをリダイレクトすることができ、

+0

NotFound()プロダクトIDあなたはparam productidのために飾るためにあなたの行動を逃したのですか、それとも意図的ですか? – Thomas

+0

この 'return HttpNotFound();'私のページpage-not-found.aspxファイルにリダイレクトするHTTPステータスコード404を設定しますか? – Thomas

+0

それは意図的な '/ Product/apple'ですが、Notfoundに' apple'が必要ないと思っています。もし必要なら、そこに文字列paramを追加することができます。 –

関連する問題