gpt4 book ai didi

c# - 如何拥有一个指向两个不同 Controller 端点的路由,它们在 WEB Api 2 中接受不同的参数

转载 作者:行者123 更新时间:2023-12-01 21:57:43 25 4
gpt4 key购买 nike

如何拥有一个指向两个不同 Controller 端点的路由,它们在 WEB Api 2 中接受不同的参数我在 Controller 中声明了两个不同的端点,对于 REST 视角,我必须对两个端点使用 alpha/{aplhaid}/beta 格式,

            [Authorize]
[HttpPost]
[Route("alpha/{aplhaid}/beta")]
public async Task<HttpResponseMessage> CreateAlpha(Beta beta, string projectId, [FromHeader] RevisionHeaderModel revision)

[Authorize]
[HttpPost]
[Route("alpha/{aplhaid}/beta")]
public async Task<HttpResponseMessage> CreateAlpha(List<Beta> betas, string projectId, [FromHeader] RevisionHeaderModel revision)

是否可以使用具有不同参数的同一路由器来指向 Web API 2 中的 2 个不同端点?

最佳答案

如果您确实需要相同的路由和相同的 ActionName,您可以使用 IHttpActionSelector 来实现。

public class CustomActionSelector : ApiControllerActionSelector, IHttpActionSelector
{
public new HttpActionDescriptor SelectAction(HttpControllerContext controllerContext)
{
var context = HttpContext.Current;

// Read the content. Probably a better way of doing it?
var stream = new StreamReader(context.Request.InputStream);
var input = stream.ReadToEnd();

var array = new JavaScriptSerializer().Deserialize<List<string>>(input);
if (array != null)
{
// It's an array
//TODO: Choose action.
}
else
{
// It's not an array
//TODO: Choose action.
}

// Default.
var action = base.SelectAction(controllerContext);
return action;
}

public override ILookup<string, HttpActionDescriptor> GetActionMapping(HttpControllerDescriptor controllerDescriptor)
{
var lookup = base.GetActionMapping(controllerDescriptor);
return lookup;
}
}

在您的 WebApiConfig 中:

    config.Services.Replace(
typeof(IHttpActionSelector),
new CustomActionSelector());

Controller 示例:

public class FooController: ApiController
{
[HttpPost]
public string Post(string id)
{
return "String";
}

[HttpPost]
public string Post(List<string> id)
{
return "some list";
}
}

如果你问我的话,这个解决方案有一些很大的缺点。首先,您应该寻找仅在需要时使用此 CustomActionSelector 的解决方案。不适用于所有 Controller ,因为它会为每个请求产生开销。

我认为你应该重新考虑为什么你真的需要两条相同的路线。我认为如果同一条路线接受不同的参数,可读性将会受到影响。但这只是我的意见。

我会使用不同的路线。

关于c# - 如何拥有一个指向两个不同 Controller 端点的路由,它们在 WEB Api 2 中接受不同的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36055495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com