gpt4 book ai didi

asp.net-web-api - 如何使用 Hyprlinkr 生成指向 HTTP POST 操作的链接?

转载 作者:行者123 更新时间:2023-12-01 11:46:08 25 4
gpt4 key购买 nike

我正在尝试使用 Hyprlinkr生成指向 HTTP Post 操作的 URL。我的 Controller 看起来像这样:

public class MyController : ApiController {
[HttpPost]
public void DoSomething([FromBody]SomeDto someDto) {
...
}
}

这条路线:

routes.MapHttpRoute(
name: "MyRoute",
routeTemplate: "dosomething",
defaults: new { controller = "My", action = "DoSomething" });

我希望得到一个简单的 URL:http://example.com/dosomething , 但它不起作用。我尝试了两种方法:

1) routeLinker.GetUri(c => c.DoSomething(null)) - 抛出 NullReferenceException

2) routeLinker.GetUri(c => c.DoSomething(new SomeDto())) - 生成无效的 URL: http://example.com/dosomething?someDto=Namespace.SomeDto

更新:在 github 上打开的问题: https://github.com/ploeh/Hyprlinkr/issues/17

最佳答案

我找到了一个解决方法,大致基于 Mark's answer .这个想法是遍历每个路由参数并删除那些应用了 [FromBody] 属性的参数。这样,不需要为每个新的 Controller 或操作修改调度程序。

public class BodyParametersRemover : IRouteDispatcher {
private readonly IRouteDispatcher _defaultDispatcher;

public BodyParametersRemover(String routeName) {
if (routeName == null) {
throw new ArgumentNullException("routeName");
}
_defaultDispatcher = new DefaultRouteDispatcher(routeName);
}

public Rouple Dispatch(
MethodCallExpression method,
IDictionary<string, object> routeValues) {

var routeKeysToRemove = new HashSet<string>();
foreach (var paramName in routeValues.Keys) {
var parameter = method
.Method
.GetParameters()
.FirstOrDefault(p => p.Name == paramName);
if (parameter != null) {
if (IsFromBodyParameter(parameter)) {
routeKeysToRemove.Add(paramName);
}
}
}
foreach (var routeKeyToRemove in routeKeysToRemove) {
routeValues.Remove(routeKeyToRemove);
}
return _defaultDispatcher.Dispatch(method, routeValues);
}

private Boolean IsFromBodyParameter(ParameterInfo parameter) {
var attributes = parameter.CustomAttributes;
return attributes.Any(
ct => ct.AttributeType == typeof (FromBodyAttribute));
}
}

关于asp.net-web-api - 如何使用 Hyprlinkr 生成指向 HTTP POST 操作的链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15047701/

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