次のように、人間が読める非常に単純なURLを使用してルーティングしたいと思います。
私はそのようにルーティングしたい: /Controller/Title-Of-The-EF-Object
私はしたくない/Controller/Action/ABCDEF01-2345-6789-0ABC-DEF01234
または
/Controller/Action/Title-Of-The-EF-Object
。アクションはルートによって処理されるため、URLにはコントローラーと識別子の文字列のみを含める必要があります。
私のエンティティには、プロパティとして一意のサニタイズされたUrlTitle文字列が含まれています。
public class Entity {
[Key]
public Guid ID { get; set; }
//Example: "Title of the EF object"
public string Title { get; set; }
//Example: "Title-Of-The-EF-Object"
public string UrlTitle { set; set; }
}
現在のルートマッピング:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
"Item",
"{controller}/{UrlTitle}",
new { controller = "{controller}", action = "Details" }
);
問題は、リクエストするときに/Controller/Title-Of-The-EF-Object
、MVCがアクションとして解釈Title-Of-The-EF-Object
していることです。これは、a)文字列であり、b)セグメント内にあるため、リソースが見つかりません。UrlTitleの代わりにエンティティのGuidを使用すると、MVCがGuidをそのように解釈するため、機能させることができます。
のカスタムルートマップを作成するにはどうすればよい{controller}/{id_string}
ですか?