Web.API 无法测试操作

本文关键字:测试 操作 API Web | 更新日期: 2023-09-27 17:56:40

我创建了一个Web.API,MVC应用程序,但在尝试测试它时遇到了一些麻烦。我收到此错误:

"

{"消息":"未找到与请求 URI 'http://localhost:60104/api/order/SayWhat/33'匹配的 HTTP 资源。","消息详细信息":"未找到与名为"order"的控制器匹配的类型。"}"

订单控制器

[System.Web.Http.HttpGet]
public string SayWhat(string quoteName)
{
    return "Hello World " + quoteName;
}

WebApiConfig

config.Routes.MapHttpRoute(
    name: "DefaultPostApi",
    routeTemplate: "api/{controller}/{action}/{quote}"
);
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));

Web.API 无法测试操作

WebApiConfig中使用以下代码.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}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
        config.Routes.MapHttpRoute(
            name: "ActionApi",
            routeTemplate: "api/{controller}/{action}/{quoteName}",
            defaults: new { quoteName = RouteParameter.Optional }
        );
    }

在控制器中:

[HttpGet]
    [ActionName("SayWhat")]
    public string SayWhat(string quoteName)
    {
        return "Hello World " + quoteName;
    }

尝试将属性"ActionName"添加到函数中。

[System.Web.Http.HttpGet()]
[ActionName("SayWhat")]
public string SayWhat(string quoteName)
{
    return Convert.ToString("Hello World ") + quoteName;
}

错误消息指示它看不到订单控制器。

"未找到与名为'order'的控制器匹配的类型。"

鉴于您指出您确实有OrderController那么一种可能性是控制器的类型不正确,因为框架会查找从ApiController继承的类型。

确保控制器的类型正确

public class OrderController : ApiController {    
    //GET api/Order/saywhat/33
    [System.Web.Http.HttpGet]
    public string SayWhat(string quote) {
        return "Hello World " + quote;
    }
}