我正在尝试根据 url 创建用户配置文件。 我知道如何从像 www.domain.com/profile?id=username 这样的网址获取参数 但我想保持 SEO 友好,而是从 url 格式中获取值(value): www.domain.com/profile/用户名
我使用 Visual Studio 2017 中的 MVC Razor 并放弃了 MSSQL 数据库,而是使用用户表实现了 MySQL。
我的想法应该如何运作。 用户访问网页www.domain.com/profile/user235
服务器加载 Controller 并获取输入“user235”
Controller 将输入发送到.cshtml页面,.cshtml页面执行 查询 MySQL 数据库获取用户数据数组并用数据填充页面。
我的想法正确吗?我应该如何处理这个问题有什么建议或建议吗?
@UrlData[0].ToString()
这将在 razor 页面中/之后获得任何值 例子: profile.cshtml 有字符串 username = @UrlData[0].ToString()
www.domain.com/profile/John
@UrlData[0].ToString() = "约翰"
如果您想要 www.domain.com/profile/John/blog43 之类的内容
字符串用户名 = @UrlData[0].ToString() 字符串 blogid = @UrlData[1].ToString()
有了这些信息,您可以查询数据库来获取信息...... 确保验证任何类型的 SQL 注入(inject)的用户名和博客输入。
最佳答案
您可以定义一个路由定义来获取这样的 seo 友好网址
以下是如何使用属性路由来做到这一点
public class ProfileController : Controller
{
[Route("Profile/{userId}")]
public ActionResult Index(string userId)
{
return Content("Proile for " + userId);
}
}
因此,当您用户访问 /yourSite/profile/scott
时,将执行配置文件 Controller 的 Index 操作,并且来自 url (scott) 的用户名值将在该操作的 userId 参数中可用方法。这里我只是返回一个字符串“scott 的个人资料”。但是您可以对其进行更新以查询数据库以获取相应的记录,并使用 View 模型将该信息传递给 View 。
如果您使用 Razor 页面,您将创建一个配置文件页面及其模型并指定路线
@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;
}
}
就像我上面提到的,我只是打印一个字符串,其中包含从网址传递的用户名。但您可以更改它以从数据库表中获取数据。
关于mysql - ASP.NET MVC Razor,使用 url/profile/{username} 生成配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46894826/