没有多个 类 的 WebApi 控制器
WebApi controller without multiple classes
据我了解,路由映射格式为
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
将 url“/api/file/1”映射到控制器 "FileController" 以及该控制器中包含的 GET 方法,该方法接受名为 "id" 的字符串输入。类似地,如果我有 url“/api/meeting/1”,它将映射到控制器 "MeetingController" 并且 GET 方法接受名为 "id".
的字符串输入
是否可以将以上两个都映射到同一个控制器?
IE,我能以某种方式设置一个 "DefaultController",它接受 URL“/api/file/1”,并将其映射到一个名为 "GetData(string id)" 的方法吗?然后在那个方法中,我能以某种方式获得 "file" 部分吗?
我问这个的原因是因为上面描述的 "FileController" 和 "MeetingController" 在实现中是相同的。唯一的区别是传递给我用来获取数据的函数的参数将从 "file" 更改为 "meeting"。
您的路线:
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 将 return(如果您接受 xml)
string>files-1</string>
话虽如此,我认为您的尝试没有意义。
如果您的控制器相似,请使用基础 class
据我了解,路由映射格式为
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
将 url“/api/file/1”映射到控制器 "FileController" 以及该控制器中包含的 GET 方法,该方法接受名为 "id" 的字符串输入。类似地,如果我有 url“/api/meeting/1”,它将映射到控制器 "MeetingController" 并且 GET 方法接受名为 "id".
的字符串输入是否可以将以上两个都映射到同一个控制器?
IE,我能以某种方式设置一个 "DefaultController",它接受 URL“/api/file/1”,并将其映射到一个名为 "GetData(string id)" 的方法吗?然后在那个方法中,我能以某种方式获得 "file" 部分吗?
我问这个的原因是因为上面描述的 "FileController" 和 "MeetingController" 在实现中是相同的。唯一的区别是传递给我用来获取数据的函数的参数将从 "file" 更改为 "meeting"。
您的路线:
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 将 return(如果您接受 xml)
string>files-1</string>
话虽如此,我认为您的尝试没有意义。
如果您的控制器相似,请使用基础 class