名前空間による差別化は、第三者図書館がある場合にのみ使用し、私たちが自分で書くクラスを区別することは避けてください。C#と名前空間
Web Apiでは、コントローラ名とアクション名が同じだが名前空間が異なると、ルーティングが行われず404エラーが発生します。私はカスタムコントローラセレクタがこれを克服するために使用できることを知っていましたが、組み込みセレクタがそれを無視するので、意図的な設計の決定であるかどうか疑問です。名前空間だけで差別化を避けるべき理由はありますか?
名前空間による差別化は、第三者図書館がある場合にのみ使用し、私たちが自分で書くクラスを区別することは避けてください。C#と名前空間
Web Apiでは、コントローラ名とアクション名が同じだが名前空間が異なると、ルーティングが行われず404エラーが発生します。私はカスタムコントローラセレクタがこれを克服するために使用できることを知っていましたが、組み込みセレクタがそれを無視するので、意図的な設計の決定であるかどうか疑問です。名前空間だけで差別化を避けるべき理由はありますか?
ASP.NET MVC/WebApiでは、ルートはController
の名前から自動的に決定されます。したがって、同じ名前の2つのController
があり、RouteAttribute
のルートを上書きしない場合、それらは同じルートを共有します。
は、あなたがこの問題を解決することができる2つの方法があります。
使用Areas
:領域は、複数のMVCS、(一般的に認証/認可規則で区切られた)特定のセクションでそれぞれにアプリケーションを分離するためのものです。これは、次のようになります。
オーバーライドroute
コントローラが(未テストが、わからないことがうまくいく場合)を使用すること:
[Route("MyHome")]
public class HomeController : Controller
{
}
[Route("MySecondHome")]
public class HomeController : ApiController
{
}
も気づくことRouteAttribute
のため最初に有効にする必要があります。詳細はhereをご覧ください。
public static void Register(HttpConfiguration config)
{
// Attribute routing.
config.MapHttpAttributeRoutes();
// Convention-based routing.
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
ただし、あなたは関係なく、名前空間の構造を、同じ名前のクラスを使用しないように試みるべきです。それはあなたが何を扱っているのかを認識することをより困難にします。
はい、同じ名前のものは(人間によって)混同される傾向があります。 – Amy
同じことを言っているが、異なる名前空間にある2つのもの(コントローラなど)が@JohnLの場合の**利点**についてお話できますか? – mjwills
私の最初の仕事のひとつで、私は3人の他のエイミーと一緒に仕事をしました。 PAシステム上で電話がかかってくると、私たち全員がフロントデスクに現れます。最終的に私たちは私たちを差別化するニックネーム(私はスクーターでした)を与えました。これがあなたのコードに起こらないようにしてください。物事に特有の名前をつけて*名前空間を使ってそれらを論理的に整理してみてください。 – Amy