Jas*_*onX 4 c# asp.net-core-mvc asp.net-core-2.0 razor-pages
多年来我做了很多ASP.NET API编程,但对.NET Core和RazorPages来说还是一个新手.我似乎无法让路由正常工作.
例如,我有一个索引页面.OnGet工作正常,正如预期的那样,它返回Razor定义的页面.现在我添加另一个方法,让我们将其称为Test到Index页面的代码隐藏,如下所示:
[Route("Test")]
public void Test()
{
Console.WriteLine("Test");
}
Run Code Online (Sandbox Code Playgroud)
现在,对于我的生活,我无法通过localhost/Index/Test或localhost/Test或我能想到的任何其他复杂路径访问此路由.这是设计的吗?localhost和localhost/index都返回默认的get方法.
这在我尝试使用漂亮网址中的所有者和产品ID显示产品详细信息时遇到了相当大的麻烦,如下所示:
products/{ownerid}/{productid}
Run Code Online (Sandbox Code Playgroud)
如上所述,我无法映射到此自定义漂亮网址.如果我理解正确,映射到{ownerid}/{productid}路由的函数应该在索引页面代码隐藏中才能找到,或者我错了?
谢谢您的帮助.
您可以使用多个处理程序:在您的代码隐藏中:
public class FooModel : PageModel
{
public void OnGet()
{
Trace.TraceInformation("Returns the page");
}
public IActionResult OnGetTest()
{
return new OkObjectResult( "Test" );
}
}
Run Code Online (Sandbox Code Playgroud)
您可以通过请求调用Test函数:
GET foo?handler=test.
此外,您可以配置页面路由以使用它进行调用GET foo/test.您可以使用@page指令在foo.cshtml文件中执行此操作:
@page "{handler?}"
@model FooModel
@{
ViewData["Title"] = "Foo";
}
<h2>Foo</h2>
Run Code Online (Sandbox Code Playgroud)
或者您可以在Startup.cs中添加路由:
public void ConfigureServices(IServiceCollection services)
{
services
.AddMvc()
.AddRazorPagesOptions( options =>
{
options.Conventions.AddPageRoute( "/foo", "foo/{handler?}" );
} );
}
Run Code Online (Sandbox Code Playgroud)
您可以使用参数添加路径的方式相同:
options.Conventions.AddPageRoute( "/foo", "products/{ownerId}/{productId}" );
Run Code Online (Sandbox Code Playgroud)
并在代码隐藏中:
public void OnGet( string productId, string ownerId)
{
Trace.TraceInformation("IDs: {0}, {1}", productId, ownerId );
}
Run Code Online (Sandbox Code Playgroud)
你看过页面处理程序吗?
你可以使用类似的东西:
<form method="GET">
<input asp-page-handler="Test">
</form>
public IActionResult OnGetTest()
{
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4854 次 |
| 最近记录: |