URLが

2016-08-08 1 views
0

私は私が実際にURLが

domainname.com/storecontroller/storename 

のように書き換えたい

domainname.com/storecontroller/storeaction/storename 

のように自分のアプリケーションのURLを定義しています、私はURLからstoreactionをスキップする必要がある、私はしたくありませんクエーストリングで "?"とにかく、経路を設定する経路や他の方法を登録することでそれを行うことはありますか?

+0

を使用してあなたは、すべてのコのためにこれをしたいですntrollersまたは特定のコントローラ? – Shyju

+0

私は2つまたは3つのコントローラのためだけにそれをしたいです。 –

+0

[RoutePrefix( "/ storecontroller/{storename}")]特定のコントローラのルートプレフィックスを追加できるはずです –

答えて

1

はい。あなたはこれを定義する必要が

routes.MapRoute("<route name>", "{controller}/{storename}", 
    new 
    { 
     action = "storeaction" 
    }, 
    new 
    { 
     controller = "somecontroller1|somecontroller2|somecontroller3", 
    }); 

(アクションは常にデフォルト値を持つことになります「storeaction」)

注:あなたは、正規表現の制約と、特定のコントローラのデフォルトパラメータとして行動し、一致を定義することができますデフォルトの一般的なルートの前にルートこれがでキックする前に、それはそれをキャッチしないように。

+0

あなたは答えは完璧ですが、コントローラごとに別のルートを登録する必要があります。 10〜20台のコントローラが必要な場合はどうですか? –

+1

@NomiAli Regexの制約を使用して、特定のコントローラとのマッチングを制限することができます。私の編集された答えをご覧ください。 –

1

Attribute routing

[RoutePrefix("Home")] 
public ActionResult HomeController : Controller 
{ 
    [Route("{storeName}")] 
    public ActionResult ProcessStore(string storeName) 
    { 
    // to do : Return something 
    } 

    public ActionResult Index() 
    { 
    // to do : Return something 
    } 
} 
[RoutePrefix("Payment")] 
public ActionResult PaymentController : Controller 
{ 
    [Route("{storeName}")] 
    public ActionResult ProcessStore(string storeName) 
    { 
    // to do : Return something 
    } 
} 
+0

)私のURLが "anothercontroller/anotheraction"のようなものであれば、それは確かに動作しません。私の "anothercontroller"には "anotheraction"メソッドが存在することに気づくはずです。 2番目に)それはうまくいきません。 –

+0

@NomiAli True私はその部分を削除しました。セダットの答えはそれに対処します。私の答えの属性ルーティングバージョンはまだ動作します。 – Shyju