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()