我正在将旧版web api应用程序转换为mvc 6/.net核心,并且遇到了无法解决的问题。在web api中,您可以定义映射到多个操作的单个路由,并根据查询字符串调用正确的操作。例如:查询字符串上的匹配路由
routes.MapHttpRoute(
name: "Foo",
routeTemplate: GetRoute("api/Foo"),
defaults: new
{
controller = "Foo",
action = "Bar",
name = "foobar"
}
);
public class Foo : ApiController
{
[AcceptVerbs("GET")]
public Task<HttpResponseMessage> Bar(int id)
{
//process request
}
[AcceptVerbs("GET")]
public Task<HttpResponseMessage> Bar(string message)
{
//process request
}
}
foo/bar?id = 1和foo/bar?message =某些消息将被路由到正确的方法。这不适用于mvc 6.我尝试使用Microsoft.AspNetCore.Mvc.WebApiCompatShim,但它不起作用,至少没有使用属性路由。除了用所有可能的参数创建单个动作,然后进行空检查之外,是否还有其他选择?不幸的是,改变路线不是一种选择,因为它们目前正在被客户端应用程序使用。
这将工作,但我不能使用api/foo/bar/abc我需要使用api/foo?message = abc和api/foo?id = 123 – cdaq
您可以使用重写url引擎来转换来自api的请求/ foo?message = abc to api/foo/bar/abc和api/foo?id = 123 to api/boo/bar/123。 –
这会工作!你能指出我有哪些资源可以说明如何做到这一点?我不熟悉重写URL引擎。 – cdaq