【问题标题】:ASP.NET MVC Razor, generate profile using url /profile/{username}ASP.NET MVC Razor,使用 url /profile/{username} 生成配置文件
【发布时间】:2018-04-04 07:47:00
【问题描述】:

我正在尝试基于 url 创建用户配置文件。 我知道如何从网址获取参数,例如 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() = "约翰"

如果你想要类似 www.domain.com/profile/John/blog43 的东西

字符串用户名 = @UrlData[0].ToString() string blogid = @UrlData[1].ToString()

有了这些信息,您可以查询数据库以获取信息... 确保验证任何类型的 sql 注入的用户名和博客输入。

【问题讨论】:

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


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      你可以定义一个路由定义来获得像这样的 seo 友好的 url

      这是使用属性路由的方法

      public class ProfileController : Controller
      {
          [Route("Profile/{userId}")]
          public ActionResult Index(string userId)
          {
              return Content("Proile for " + userId);
          }
      }
      

      因此,当您用户访问/yourSite/profile/scott 时,将执行 Profile 控制器的 Index 操作,并且来自 url (scott) 的用户名值将在操作方法的 userId 参数中可用。在这里,我只是返回一个字符串“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 传递的用户名打印一个字符串。但是您可以更改它以从您的 db 表中获取数据。

      【讨论】:

      • 感谢您的回复,我不确定我使用的是哪个 MVC 版本,但我无法仅添加一个 Web API 控制器类 (v2.1) 的控制器。使用您的代码时,它无法识别它。
      • 你的意思是你无法添加控制器?如果您使用 Visual Studio ,您可以右键单击并添加一个新类。是什么阻止了你?
      • 我是 ASP.NET 新手,选择了默认的 MVC Razor 模板,没有 Controller 文件夹,不允许我添加控制器。我可以在 App_Code 思想中添加 .cs 类。但它会将其识别为控制器并加载它吗?
      • 所以你不是在使用 asp.mvc 应用程序,而是在使用 razor pages ?
      • Visual Studio > 新建 > 网站 > ASP.NET 网站 (Razor v3)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-18
      • 2015-08-29
      • 2012-09-20
      相关资源
      最近更新 更多