ASP.NET Web 和 api 的核心双路由
ASP.NET Core dual routes for web and api
这是针对 ASP.NET 核心应用程序的。 json Web API 需要与普通网站一起添加。
所以在program.cs
中添加了第二条路线:
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllerRoute(name: "default",
pattern{controller=Home}/{action=Index}/{id?}");
//2nd route for web api
app.MapControllerRoute(name: "api",
pattern: "{controller=WebApi}/{Action}/{country?}/{id?}");
app.MapRazorPages();
app.Run();
Web API WebApicontroller
已编写,class 开始如下 - 注意 [
括号 ]
语法。
using System.Web.Http;
using Microsoft.AspNetCore.Http;
namespace myprogram.Controllers
{
// [System.Web.Http.Route("[controller]/[action]/{id}")]
[Microsoft.AspNetCore.Components.Route("[controller]/[action]/{id}")]
public class WebApiController : ApiController
{
// http://localhost:53912/webapi/Test
[System.Web.Http.HttpGet]
[System.Web.Http.ActionName("Test")]
public string Test()
return "Tested";
}
}
打开类似的页面 http://localhost:53912/webapi/test
无效。
我错过了什么?我一定是忽略了这里的东西。
您必须从配置中删除第二个选项
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
并使控制器路由 id 可选,因为例如您的测试没有 id 参数
[Route("[controller]/[action]/{id?}")]
public class WebApiController : ApiController
或者您可以直接将路由添加到操作中
[Route("~/webapi/test")]
public string Test()
这是针对 ASP.NET 核心应用程序的。 json Web API 需要与普通网站一起添加。
所以在program.cs
中添加了第二条路线:
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllerRoute(name: "default",
pattern{controller=Home}/{action=Index}/{id?}");
//2nd route for web api
app.MapControllerRoute(name: "api",
pattern: "{controller=WebApi}/{Action}/{country?}/{id?}");
app.MapRazorPages();
app.Run();
Web API WebApicontroller
已编写,class 开始如下 - 注意 [
括号 ]
语法。
using System.Web.Http;
using Microsoft.AspNetCore.Http;
namespace myprogram.Controllers
{
// [System.Web.Http.Route("[controller]/[action]/{id}")]
[Microsoft.AspNetCore.Components.Route("[controller]/[action]/{id}")]
public class WebApiController : ApiController
{
// http://localhost:53912/webapi/Test
[System.Web.Http.HttpGet]
[System.Web.Http.ActionName("Test")]
public string Test()
return "Tested";
}
}
打开类似的页面 http://localhost:53912/webapi/test
无效。
我错过了什么?我一定是忽略了这里的东西。
您必须从配置中删除第二个选项
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
并使控制器路由 id 可选,因为例如您的测试没有 id 参数
[Route("[controller]/[action]/{id?}")]
public class WebApiController : ApiController
或者您可以直接将路由添加到操作中
[Route("~/webapi/test")]
public string Test()