没有多个类的WebApi控制器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了没有多个类的WebApi控制器相关的知识,希望对你有一定的参考价值。

据我所知,路线图与格式

            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }

将URL“/ api / file / 1”映射到控制器“FileController”和该控制器中包含的GET方法,该控制器接受名为“id”的字符串输入。类似地,如果我有url“/ api / meeting / 1”,它将映射到控制器“MeetingController”和接受名为“id”的字符串输入的GET方法。

是否可以将上述两个映射到同一个控制器?

IE,我可以以某种方式设置一个“DefaultController”,它接受URL“/ api / file / 1”,并将其映射到一个名为“GetData(string id)”的方法?然后在那个方法中,我可以以某种方式获得“文件”部分吗?

我问这个的原因是因为上面描述的“FileController”和“MeetingController”在实现中是相同的。唯一的区别是传递给我用于获取数据的函数的参数将从“文件”更改为“会议”。

答案

你的路线:

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

你的控制器:

public class GenericController : ApiController
{
    [HttpGet]
    public string GenericAction(string data, int? id)
    {
        return data + "-" + id.ToString();
    }
}

这个http://localhost:53221/api/files/1将返回(如果你接受xml)

string>files-1</string>

也就是说,我不认为你想做的事情是有道理的。 如果您的控制器类似,请使用基类

以上是关于没有多个类的WebApi控制器的主要内容,如果未能解决你的问题,请参考以下文章

CORS 多个标头

MVC & WebAPI“找到多个类型匹配名为...的控制器”

WebApi一个控制器中定义多个Get方法。

HTTP post请求中的多个参数不在Asp.net webApi 2.0中绑定

C# WebApi增加多个控制器的方法

java 代码片段