我正在尝试根据网址创建用户个人资料。 我知道如何从网址获取参数,例如www.domain.com/profile?id=username 但我想保持它的SEO友好,而不是从url格式获得价值: www.domain.com/profile/username
我正在使用Visual Studio 2017中的MVC Razor并且反对MSSQL数据库,而是使用用户表实现MySQL。
我的想法应该如何运作。 用户访问网页www.domain.com/profile/user235
服务器加载控制器并获取输入“user235”
控制器将输入发送到.cshtml页面并执行.cshtml页面 查询MySQL数据库获取用户数据数组并用数据填充页面。
我的想法是否正确?我应该如何处理这个建议或建议?
@UrlData [0]的ToString()
这将在剃刀页面之后获得任何值 例: profile.cshtml有字符串username = @UrlData [0] .ToString()
www.domain.com/profile/John
@UrlData [0] .ToString()=“John”
如果你想要像www.domain.com/profile/John/blog43那样的东西
string username = @UrlData [0] .ToString() string blogid = @UrlData [1] .ToString()
使用此信息,您可以查询数据库以获取信息...... 确保为任何类型的sql注入验证用户名和博客输入。
答案 0 :(得分:1)
您可以定义路线定义以获取类似
的seo友好网址以下是使用属性路由
的方法public class ProfileController : Controller
{
[Route("Profile/{userId}")]
public ActionResult Index(string userId)
{
return Content("Proile for " + userId);
}
}
因此,当您用户访问/yourSite/profile/scott
时,将执行Profile控制器的Index操作,并且url(scott)中的用户名值将在action方法的userId参数中可用。在这里,我只是返回一个字符串“Profile for scott”。但您可以使用它来查询数据库以获取相应的记录,并使用视图模型将该信息传递给视图。
如果您使用Razor页面,您将创建一个Profile页面及其模型并指定路径
@page "{id:int}"
@model ProfileModel
@{
ViewData["Title"] = "Profile";
}
<h3>@Model.Message</h3>
在Profile.cshtml.cs
public class ProfileModel : PageModel
{
public string Message { get; set; }
public void OnGet(string id)
{
Message = "Profile of "+ id;
}
}
就像我上面提到的,我只是使用来自url的传递的用户名打印一个字符串。但您可以更改它以从数据库表中获取数据。
答案 1 :(得分:0)