0

次のように、人間が読める非常に単純な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}ですか?

4

1 に答える 1

0

これは、質問を入力しているときに発生しました。ルートの順序が間違っていました。* 0_0 *

    routes.MapRoute(
        "Item",
        "{controller}/{UrlTitle}",
        new { controller = "{controller}", action = "Details" }
    );

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
于 2012-08-30T18:35:02.117 に答える