c# - 找不到 Web API 路由?

标签 c# asp.net asp.net-web-api2 asp.net-web-api-routing

我正在努力弄清楚为什么我无法到达 API 端点。我正在构建一个 Web API,它将调用另一个本地 API,从我所看到的一切来看,它应该会到达终点,我正在寻找任何想法。

这是原始 API 中的代码。我正在使用 RestSharp 调用电话。

string jsonToSend = JsonConvert.SerializeObject(m);

var request = new RestRequest("CheckForDuplicateID", Method.POST);     
request.AddParameter("application/json; charset=utf-8", jsonToSend, ParameterType.RequestBody);
request.RequestFormat = DataFormat.Json;
request.AddParameter("CandidateID", m.CandidateID);     
request.AddParameter("FirstName", m.FirstName);         
request.AddParameter("LastName", m.LastName);

var client = new RestClient("http://localhost:60077/api/IDM/");
var content = client.Execute(request).Content;

这是我想要到达的辅助 API 的终点。

[HttpPost]
public static DuplicateCheck CheckForDuplicateID([FromBody] DuplicateCheck m)
{
    ....code 
}

这是我的 RouteConfig.cs 文件。我已经尝试了两种路线,但没有一种有效。

public static void Register(HttpConfiguration config)
{
    // Web API configuration and services

    // Web API routes
    config.MapHttpAttributeRoutes();

    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{action}/{id}",
        defaults: new { id = RouteParameter.Optional }

    //config.Routes.MapHttpRoute(
    //    name: "DefaultApi",
    //    routeTemplate: "api/{controller}/{id}",
    //    defaults: new { id = RouteParameter.Optional }
    );
}

当我在本地启动辅助 API 时,它在我上面硬编码的 localhost:60077 上运行。我的 Controller 的名称是 IDMController,这是我收到的消息,但 URL 对我来说看起来是正确的。

{"Message":"No HTTP resource was found that matches the request URI 'http://localhost:60077/api/IDM/CheckForDuplicateID'.","MessageDetail":"No type was found that matches the controller named 'IDM'."}

最佳答案

操作必须是 ApiController 的实例成员,而不是静态

[HttpPost]
public DuplicateCheck CheckForDuplicateID([FromBody] DuplicateCheck m) {
    ....code 
}

由于属性路由已启用

config.MapHttpAttributeRoutes();

考虑在 API Controller 上使用属性路由来获得所需的行为

[RoutePrefix("api/IDM")]
public class IDMController : ApiController {

    //...

    //POST api/IDM/CheckForDuplicateID
    [HttpPost]
    [Route("CheckForDuplicateID")]
    public DuplicateCheck CheckForDuplicateID([FromBody] DuplicateCheck m) {
        ....code 
    }
}

引用Attribute Routing in ASP.NET Web API 2

关于c# - 找不到 Web API 路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59548369/

相关文章:

c# - 帮助创建枚举扩展助手

asp.net - ó 在 xml 文件中不允许,但在 .net 资源文件中允许?

c# - 无法验证 UseJwtBearerAuthentication 中的 token 。授权被拒绝

c# - asp.net webapi动态授权

c# - C# 中是否有任何速记来使 setter 额外设置一个脏标志

c# - 每次制作 dll 时如何告诉 vb6 不要创建新版本的 interfaces/com 对象?

asp.net - 如何找出我的 ASP.NET 代码在哪个帐户下运行?

asp.net - 之前必须调用 "WebSecurity.InitializeDatabaseConnection"方法吗?

c# - 简单注入(inject)器容器无法从插入的外部库注册 Web API Controller

c# - 如何在 .NET Core 2.1 中使用 String.Create 的示例