0

この質問に対する答えをどこでも見つけるのに苦労しています。

ユーザーが投稿を作成し、URLを投稿に変更できるフォームを作成する必要があります。

たとえば、デフォルトルートが

http://www.domain.com/posts/[the-title-of-the-post]

ユーザーはこれを次のように変更できます

http://www.domain.com/[modified-title-of-the-post].

[modified-title-of-the-post]、ユーザーが作成したいものであれば何でもかまいません。これは、投稿のタイトルに関連付けられていないことを意味し、それだけでなく、投稿のタイトルも/posts/なくなりました。

/topics/また、これはグローバルである必要があることにも言及する必要があります。つまり、ユーザーは、またはなどのサイトで他のもののURLを(上記のように)変更できる必要があります。/blog/

どんな助けでも大歓迎です、

ありがとう、Hiva

4

1 に答える 1

2

global.asax に 2 つのルートを作成できます。このようなもの

routes.MapRoute("", "posts/{url}", new { controller = "Home", action = "Posts" });
routes.MapRoute("", "{url}", new { controller = "Home", action = "Posts" });

それらの両方がポイントしHomeController、アクションPosts

public ActionResult Posts(string url)
{

}

RouteBaseクラスを拡張することを検討する必要があるすべての URL を処理するには

そのようなことはすべきです

public class CustomRouting : RouteBase
{
  public override RouteData GetRouteData(HttpContextBase httpContext)
  {
    RouteData result = null;
    string requestUrl = httpContext.Request.AppRelativeCurrentExecutionFilePath;

    //Handle the request
    //Compile the RouteData with your data
    result = new RouteData(this, new MvcRouteHandler());
    result.Values.Add("controller", "MyController");
    result.Values.Add("action", "MyAction");
    result.Values.Add("id", MyId);
    }
  }
  return result;
}

public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
{
  //I only need to handle outbound so here is ok
  return null;
}

}

global.asax で、カスタム ルート ハンドラーを登録します。

public static void RegisterRoutes(RouteCollection routes)
{
  routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

  routes.Add(new CustomRouting());

  routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional });
}
于 2012-04-14T09:27:21.597 に答える