ASP.NET MVC Razor,使用url / profile / {username}生成配置文件

时间:2017-10-23 17:05:53

标签: mysql asp.net asp.net-mvc asp.net-mvc-4 razor

我正在尝试根据网址创建用户个人资料。 我知道如何从网址获取参数,例如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数据库获取用户数据数组并用数据填充页面。

我的想法是否正确?我应该如何处理这个建议或建议?

编辑:找到解决方案:https://docs.microsoft.com/en-us/aspnet/web-pages/overview/routing/creating-readable-urls-in-aspnet-web-pages-sites

@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注入验证用户名和博客输入。

2 个答案:

答案 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)