2016-10-12 17 views
1

私は現在このURL "/ Cloud/Hosting/RoaringPenguin/Manage/Exclusions"を生成しようとしています。ここAsp.Net MVC 5エリア下でのカスタムアクションのルーティング

はエリア登録ここで

public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "Hosting_default", 
      "Cloud/Hosting/{controller}/{action}/{id}", 
      new { action = "Index", id = UrlParameter.Optional } 
     ); 
    } 

iが試みたコントローラ

public class RoaringPenguinController : PortalControllerBase 
{ 


    public ActionResult Exclusions() 
    { 
     return View("Exclusions"); 
    } 


} 

私も試みたので

[Route("Manage/Exclusions")] 
public ActionResult Exclusions() 

様作用自体の上に経路を追加でありますコントローラー自体にいくつかの属性を追加する

[RouteArea("Hosting")] 
[RoutePrefix("RoaringPenguin")] 
public class RoaringPenguinController : PortalControllerBase 

でも、どちらも機能していないようです。すべての属性をオフにしておくと、最終的なURLは「/ Cloud/Hosting/RoaringPenguin/Exclusions」です。 誰も私はどのようにURLの "管理"を得ることができる知っていますか?

はちょうど私がすべてのヘルプは高く評価されRouteConfigクラス

routes.MapMvcAttributeRoutes(); 

の下で私のRegisterRoutes方法で、次のセットを持って確認します。ありがとう

答えて

1

デフォルトのエリアルートでは、最後に「管理/除外」の部分が許可されていません。 URLを/Cloud/Hosting/RoaringPenguin/Exclusions(パスの一部分を除いてManageを差し引いたもの)にした場合、正常に動作します。

経路が正確に必要な場合は、属性ルーティングが最適です。しかし、あなたの言及した試みは、何か他のものが欠けている。お使いのコントローラは、パスの最初の部分を構成するRouteAreaRoutePrefixの両方で飾らする必要があります:あなたは一つだけでRouteAreaを指定することができるように

[RouteArea("Hosting", AreaPrefix = "Cloud/Hosting")] 
[RoutePrefix("RoaringPenguin")] 
public class RoaringPenguinController : Controller 

はしかし、それは、分野を扱う際に、実際にベースコントローラを実装するために、典型的なのです場所は:

[RouteArea("Hosting", AreaPrefix = "Cloud/Hosting")] 
public class HostingBaseController : Controller 

[RoutePrefix("RoaringPenguin")] 
public class RoaringPenguinController : HostingBaseController 

次に、あなたの行動に:

[Route("Manage/Exclusions")] 
public ActionResult Exclusions() 

あなたが持っていたとして。

+0

こんにちはChris、 私は最初の提案(ベースコントローラなし)を試しましたが、取得するのはすべて404エラーです '/'アプリケーションのサーバーエラーです。 リソースが見つかりません。 説明:HTTP 404。探しているリソース(またはその依存関係の1つ)が削除されているか、名前が変更されているか、一時的に利用できない可能性があります。次のURLを確認し、正しく入力されていることを確認してください。 要求されたURL:/ Cloud/Hosting/RoaringPenguin/Manage/Exclusions バージョン情報:Microsoft .NET Frameworkバージョン:4.0.30319; ASP.NETバージョン:4.6.1069.1' – tjackadams

+1

何か別のことが起こっています。エリアが正しく登録されていないか、属性ルーティングが正しく有効になっていないか、別のルートがこれと衝突しています。あなたが投稿したものに基づいて、これはうまくいくはずです。あなたのエリアが実際に 'Hosting'ではなく、' CloudHosting'のようなものであれば、コードに必要な修正を加えなければなりません。 –

+0

あなたは正しいです。 私のエリア登録後、私の属性ルーティングが呼び出されていました。 これは解決策です '//属性ルーティング routes.MapMvcAttributeRoutes(); //エリア登録 AreaRegistration.RegisterAllAreas(); ' 私が最初の解決策を変更した後、どうもありがとう! – tjackadams

0

あなたは

AreaRegistration.RegistrationAllAreas(); 
この行を記述する必要が唯一のその後これは、最初の行

routes.MapMvcAttributeRoutes(); 

なります

[RouteArea("AreaName", AreaPrefix = "Cloud/Hosting")] 
[RoutePrefix("RoaringPenguin")] 
public class SampleController : Controller 
{ 
    [Route("Manage/Exclusions")] 
    public ActionResult Exclusions() 
    { 
     return View("Exclusions"); 
    } 
} 

または

[RoutePrefix("Cloud/Hosting/RoaringPenguin")] 
public class RoaringPenguinController : PortalControllerBase 
{ 

    [Route("Manage/Exclusions")] 
    public ActionResult Exclusions() 
    { 
     return View("Exclusions"); 
    } 

} 

このコードを試してみてください

関連する問題