1

MVCルーティングを使用してURL短縮サービスを作成したいと思います。次のURLを使用したいのです:{host} /?{word}

これを行うには、MapRouteメソッドを使用して、デフォルトを正しいコントローラーに移動させます。そしてそれはそうします、しかしそれが{word}の内容の代わりにパラメータにnullを渡すとき。

パラメータ名、つまり{host} /?{param-name} = {word}を指定しても、同じことが正しく機能します。

パラメータ名を指定しない場合は、最初のパラメータまたはデフォルトのパラメータに移動する必要があることをMVCに伝える方法を知っている人はいますか?

4

1 に答える 1

3

アクションメソッドに適用するアクションフィルターの作成を試みることができます。アクションフィルターは、URLクエリパラメーターを通過する必要があります。空の値を持つパラメーターが見つかった場合は、パラメーターにバインドできます。

public override void OnActionExecuting(ActionExecutingContext filterContext) {
if (filterContext.HttpContext.Request.Url != null) {
    NameValueCollection urlQuery = System.Web.HttpUtility.ParseQueryString(filterContext.HttpContext.Request.Url.Query);

    for (int i = 0; i < urlQuery.Keys.Count; i++ )
    {
        if (urlQuery.Get(urlQuery[i]) == null)
        {
            filterContext.ActionParameters["word"] = urlQuery[i];
        }
    }
}
base.OnActionExecuting(filterContext);

}

惨めに失敗しないように、nullではない条件をいくつか書く必要があります:)

編集: ドロップしたい場合は?このようなデフォルトのMVCURLルーティングを使用するだけです。

routes.MapRoute(
    "UrlShortener", // Route name
    "{word}", // URL with parameters
    new { controller = "UrlShortener", action = "Fetch",  word="Default", } 

);

あなたのコントローラーは受け入れます

public ActionResult UrlShortener(string word) {
if (word == "Default") return Content("No word specified");

//some BLL
return View();

}

そうすれば、URLはhttp:// hostname / wordになります。単語が指定されていない場合は、「デフォルト」を渡します。

それがあなたが望んでいたものなら

于 2012-04-23T19:15:44.843 に答える