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

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

我正在尝试根据 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 数据库获取用户数据数组并用数据填充页面。

我的想法正确吗?我应该如何处理这个问题有什么建议或建议吗?

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

@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/

相关文章:

c# - 登录应用程序的问题

mysql - sql : Counting growth over time

c# - IIS 中的 R-ASP.NET 应用程序部署

c# - MVC3 路线与区域...有点困惑

mysql - mariaDB JSON_SET 命令

php - 将 PHP 文件链接到数据库

Web 托管服务的 C# 支持

asp.net - 谷歌浏览器崩溃后恢复 session cookie,如何避免?

asp.net-mvc - 数据库中已经有一个名为 'AspNetRoles'的对象

asp.net-mvc - MVC 和 JQuery UI 选项卡 - 如何锚定到各种操作的选项卡?