【问题标题】:web.api cannot test actionweb.api 无法测试操作
【发布时间】:2015-06-17 12:53:39
【问题描述】:

我创建了一个 Web.API、MVC 应用程序,但在尝试对其进行测试时遇到了一些问题。我收到此错误:

"{"Message":"未找到与请求 URI 'http://localhost:60104/api/order/SayWhat/33'匹配的 HTTP 资源。","MessageDetail":"未找到与名为 '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"));

【问题讨论】:

  • 你的控制器类是公开的吗?
  • 是的,控制器是公开的
  • 配置和控制器看起来不错。您应该显示更多代码。您确定您的应用程序正在该端口上运行吗?你有其他的 APi 或 MVC 路线吗?

标签: c# asp.net-web-api asp.net-mvc-routing


【解决方案1】:

在 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;
    }

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我已经用我在这个中得到的所有内容更新了我的 WebApiConfig。我也尝试了 actionname 属性,但这并没有帮助。还是一样的错误..
    • 好的,我已经找到解决方案更改此: routeTemplate:="api/{controller}/{action}/{quote}" 与此 routeTemplate:="api/{controller}/{action }/{quotename}"
    【解决方案3】:

    错误消息表明它没有看到 Order 控制器。

    “未找到与名为 '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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-17
      • 2010-09-10
      • 1970-01-01
      相关资源
      最近更新 更多