MVC 5路由 - 使用URL字符串einstead GUID

时间:2016-06-08 19:32:21

标签: asp.net-mvc routing asp.net-mvc-5

我使用自定义网址strng进行友好的URL搜索引擎优化。 这是我的模特:

[Table("UserProfiles")]
public class UserProfile
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }
    public virtual ApplicationUser User { get; set; }
    public string UserId { get; set; }
    public DateTime CreatedAt { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public string UrlSeo { get; set; }
}

所以我需要做下一件事: 使用此https://localhost/UserProfiles/Details/Guid_Here之类的默认路由。这默认工作正常。接下来我要显示如下用户网址:https://localhost/User_url_Seo_Here 还有一件事:https://localhost/UserProfiles/User_url_here 那么我就改变了我的一个模型不工作的路线并给了我400个不好的请求 这是我的控制器示例:

// GET: UserProfiles/Details/5
public async Task<ActionResult> Details(Guid? id)
{
    if (id == null)
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }
    UserProfile userProfile = await db.UserProfiles.FindAsync(id);
    if (userProfile == null)
    {
        return HttpNotFound();
    }
    return View(userProfile);
}

没有我的路线: 如果我使用这样的路线:

 routes.MapRoute(
    name: "DetailUserProfile",
    url: "UserProfiles/{id}",
    defaults: new
    {
        controller = "UserProfiles",
        action = "Details",
        ident = UrlParameter.Optional
    }
);

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

它会删除详细信息上的操作名称,但CRUD无效。如果我使用这样的控制器:

// GET: UserProfiles/View/5
public async Task<ActionResult> ViewProfile(string urlseo)
{
    if (urlseo == null)
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }
    UserProfile userProfile = await db.UserProfiles.FirstOrDefaultAsync(x => x.UrlSeo == urlseo);
    if (userProfile == null)
    {
        return HttpNotFound();
    }
    return View(userProfile);
}

这样的路线:

routes.MapRoute(
   name: "ViewUserProfile5",
   url: "UserProfiles/{action}/{urlseo}",
   defaults: new
   {
       controller = "UserProfiles",
       action = "ViewProfile",
       urlseo = UrlParameter.Optional
   }
);

我收到HTTP错误400.0 - 错误请求 但是,如果我正在更改var = UrlParameter.Optional它工作正常,不是很好,但控制器使用自定义网址但CRUD操作已停止工作。

0 个答案:

没有答案