我使用自定义网址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操作已停止工作。