如何在.net core web 中将 url 设置为 webapi?

Posted

技术标签:

【中文标题】如何在.net core web 中将 url 设置为 webapi?【英文标题】:How to set url as webapi in the .net core web? 【发布时间】:2019-12-29 18:29:12 【问题描述】:

在 Web 应用程序中,我创建了一个 Page:DetailPage

public void OnGet(int id)

    var bll = new BLL.Articles();
    Item = bll.GetModel(id);
    if (Item == null)
    
        RedirectToPage("Blogs");
    

网址是

localhost/Detail?id=1

我可以将其设为 Web API URL,例如 `

localhost/Detail/1

我添加了[HttpGet("id")],但没有按预期工作。

【问题讨论】:

查看文档docs.microsoft.com/en-us/aspnet/core/razor-pages/… @Nkosi 谢谢我添加它 options.Conventions.AddPageRoute("/Contact", "TheContactPage/text?.html");对吗? @Nkosi 我找不到 Model.RouteDataTextTemplateValue 页面不包含它 【参考方案1】:

由于 @Nkosi 在 cmets 中提供了正确的 document,您必须修改 Startup.cs

像这样改变ConfigureServices方法:

services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_0)
.AddRazorPagesOptions(options =>

    options.Conventions.AddPageRoute("/Detail", "Detail/id");
);

现在实现您的标准视图

@page
@model Item

<p>@Model.[property]</p>

【讨论】:

[属性] 是什么意思? cs文件中的一样吗? 你之前在Item对象中声明的@daotian属性。比如IdNameModifiedDate...。 Item 是您在此行中使用的:Item = bll.GetModel(id);【参考方案2】:

您可以将其添加到您的 *.cshtml 页面的顶部:

@page "id:int"

然后在您的详细信息页面中:

public void OnGet([FromRoute] int id)

无需修改您的Startup.cs 文件。

【讨论】:

谢谢@crgolden,但只有 int 可以 id:string 不起作用 string 是默认的,所以在这种情况下你可以使用@page(没有绑定) 好吧,在这种情况下它工作得很好,但我个人认为通过在一个地方声明所有剃须刀选项更优雅,你也可以完全控制路由options.Conventions.AddPageRoute("/Detail", "alias/id"); @Masoud Keshavarz 当您修改您的Startup.cs 时,您将您的页面与特定的应用程序实现紧密耦合。如果需要,这使得很难将它们分离到可重用的 Razor 类库中。如果页面很多,您的Startup.cs 也会有很多硬编码字符串。 @crgolden 如果只有@页面那么[FromRoute]也需要?

以上是关于如何在.net core web 中将 url 设置为 webapi?的主要内容,如果未能解决你的问题,请参考以下文章

在 ASP.NET Core MVC 中将自定义查询参数添加到操作 URL

如何在asp.net web api中将图像路径转换为http url?

如何在 ASP.Net 中将除单个 URL 之外的所有 URL 重定向到 https?

ASP.NET 4.5 在 ASP.NET Core 2.0 应用程序下的 Azure Web App 中将 502.5 作为虚拟应用程序抛出

如何在 Web API .NET Core 的控制器之外获取当前用户

如何在 Visual Studio 中将 .NET Framework 更改为 .NET Standard/Core?