今天在用.NET Web API写一个接口的时候遇到一个问题。在Controller中新加了一个方法,客户端就不能请求接口了,当时建WEB API项目是用的VS默认设置,在服务端打断点一直没有进去,而APP端一直报服务端响应失败!奇怪的是连生成的Help API说明都没Controller说明。

这样也办法用WebAPITestClient测试,后来用想到了用HttpRequester插件请求一下接口果然出错了。

<Error><Message>出现错误。</Message><ExceptionMessage>找到了与该请求匹配的多个操作: 
类型 Lanhu.seoDayCharge.API.Controllers.StatsController 的 KeywordsRankDayList
类型 Lanhu.seoDayCharge.API.Controllers.StatsController 的 KeywordsList</ExceptionMessage><ExceptionType>System.InvalidOperationException</ExceptionType><StackTrace>   在 System.Web.Http.Controllers.ApiControllerActionSelector.ActionSelectorCacheItem.SelectAction(HttpControllerContext controllerContext)
   在 System.Web.Http.ApiController.ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken)
   在 System.Web.Http.Dispatcher.HttpControllerDispatcher.&lt;SendAsync&gt;d__1.MoveNext()</StackTrace></Error>

看来是路由出错了,找到测试路由的地方:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.linq;
  4. using System.Web.Http;
  5. namespace Lanhu.seoDayCharge.API
  6. {
  7. public static class WebApiConfig
  8. {
  9. public static void Register(HttpConfiguration config)
  10. {
  11. // Web API 配置和服务
  12. // Web API 路由
  13. config.MapHttpAttributeRoutes();
  14. config.Routes.MapHttpRoute(
  15. name: "DefaultApi",
  16. routeTemplate: "api/{controller}/{id}",
  17. defaults: new { id = RouteParameter.Optional }
  18. );
  19. }
  20. }
  21. }

细心的同学可能看到,上面路由规则配置是没有action的,加上action就ok了。

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

问题原因:

微软的web api是严格遵循realfull设计思想的,其实默认webapi只有 get,post,delete,put 4种方法名。四中方法名,根据你提交的形式来区别。

换句话说用vs创建WEB API项目时路由默认是没有加Action的,这一点和ASP.NET mvc是有区别的。也就是如果在路由规则中没有定义action部分,在一个Web API的Controller里面只能有一个post方式提交的方法,如果新加了一个post方式提交的方法就会出现上面提到错误。

解决.NET Web API生成的Help无Controller说明&服务端接收不到请求的更多相关文章

  1. asp.net core web api 生成 swagger 文档

    asp.net core web api 生成 swagger 文档 Intro 在前后端分离的开发模式下,文档就显得比较重要,哪个接口要传哪些参数,如果一两个接口还好,口头上直接沟通好就可以了,如果 ...

  2. 为ASP.NET WEB API生成人性化说明文档

    一.为什么要生成说明文档 我们大家都知道,自己写的API要供他人调用,就需要用文字的方式将调用方法和注意事项等写成一个文档以更好的展示我们设计时的想法和思路,便于调用者更加高效的使用我们的API. 当 ...

  3. Glassfish在SpringMVC服务端接收请求时字符出现乱码的解决办法

    环境描述 前端:jsp 后端:SpringMVC Controller 尽管jsp页面已设置了pageEncoding: <%@page contentType="text/html& ...

  4. .NET WEB API关键过程 思维导图

    背景说明 近期在去面试的过程中,被问及有关WEB API的一些特性,一时竟不知该如何回答,故根据自己已知的知识,加上网上搜索的,详细列举了一下,期望对WEB API有一个比较开阔和全面的认知. 关键要 ...

  5. ASP.NET Web API路由系统:路由系统的几个核心类型

    虽然ASP.NET Web API框架采用与ASP.NET MVC框架类似的管道式设计,但是ASP.NET Web API管道的核心部分(定义在程序集System.Web.Http.dll中)已经移除 ...

  6. ASP.NET Web API的Controller是如何被创建的?

    Web API调用请求的目标是定义在某个HttpController类型中的某个Action方法,所以消息处理管道最终需要激活目标HttpController对象.调用请求的URI会携带目标HttpC ...

  7. ASP.NET Web API框架揭秘:路由系统的几个核心类型

    ASP.NET Web API框架揭秘:路由系统的几个核心类型 虽然ASP.NET Web API框架采用与ASP.NET MVC框架类似的管道式设计,但是ASP.NET Web API管道的核心部分 ...

  8. .net core web api + Autofac + EFCore 个人实践

    1.背景 去年时候,写过一篇<Vue2.0 + Element-UI + WebAPI实践:简易个人记账系统>,采用Asp.net Web API + Element-UI.当时主要是为了 ...

  9. ASP.NET MVC - WEB API

    ASP.NET WEB API 与WEB API有关的类型 HttpMessageHandler(System.Net.Http)(消息处理器) 表示Http请求的处理程序,处理程序类似于Http管道 ...

随机推荐

  1. 汇编语言--微机CPU的指令系统(五)(字符串操作指令)

    (11)字符串操作指令 字符串操作指令的实质是对一片连续存储单元进行处理,这片存储单元是由隐含指针DS:SI或ES:DI来指定的.字符串操作指令可对内存单元按字节.字或双字进行处理,并能根据操作对象的 ...

  2. 前端入门2-HTML标签

    本篇文章已授权微信公众号 dasu_Android(大苏)独家发布 声明 本系列文章内容全部梳理自以下四个来源: <HTML5权威指南> <JavaScript权威指南> MD ...

  3. HDU 1527 取石子游戏(威佐夫博弈)

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...

  4. js中判断空及获取当前服务的根路径

    function isValue(o) { return (this.isObject(o) || this.isString(o) || this.isNumber(o) || this.isBoo ...

  5. 在 Apex 中使用合并统计查询

    SOQL 中的合并统计查询 在 SOQL 中,我们可以使用一系列函数来进行合并统计查询.它们的功能和标准 SQL 中的 SUM(),COUNT() 等函数类似. 官方文档 Apex 中使用合并统计查询 ...

  6. Ubuntu添加新分区

    1.查看分区 ~$ sudo fdisk -l 2.添加分区 ~$ fdisk /dev/sda 3.输入m查看帮助 ~$ m 4.输入n新建分区,即添加分区 ~$ n 这里会出现设置分区大小 5.输 ...

  7. 章节四、3-While循环-DoWhile语句

    一.while死循环 package introduction5; public class WhileDemo { public static void main(String[] args) { ...

  8. (网页)html中页面传递参数不用cookie不用缓存,js方法搞定

    function GetQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&] ...

  9. 第二篇 Html(13章节)-a标签,img标签,列表,表格

    1. a标签 - 超链接,可以跳转 - 锚  href='#某个标签的ID'    标签的ID不允许重复 <!DOCTYPE html> <html lang="en&qu ...

  10. 2016-04-25-信息系统实践手记5-CACHE设计一例

    layout: post title: 2016-04-25-信息系统实践手记5-CACHE设计一例 key: 20160425 tags: 业务 场景 CACHE 系统分析 系统设计 缓存 modi ...