gpt4 book ai didi

c# - 使用属性路由为 Web Api 在 View 中构造 url

转载 作者:太空狗 更新时间:2023-10-29 17:31:34 25 4
gpt4 key购买 nike

如何在我的 View 中从 web api 获取 url?

示例(来自 msdn-blog ):

[RoutePrefix("reviews")]
public class ReviewsController : ApiController
{
// eg.: /reviews
[Route]
public IHttpActionResult Get() { ... }
// eg.: /reviews/5
[Route("{reviewId}")]
public IHttpActionResult Show(int reviewId) { ... }
// eg.: /reviews/5/edit
[Route("{reviewId}/edit")]
public IHttpActionResult Edit(int reviewId) { ... }
}

现在我想在我的 View 中构造“/reviews/edit”,我该怎么做?

我已经尝试创建一个小的扩展方法,但它要求我为每条路线提供一个实际的“RouteName”。有没有我可以使用的方法(比如在 MVC 中),我可以只传递 Controller 和 Action ?

@Url.Action("Edit", "Reviews)

我现在使用的方法(使用 RouteName)也不允许我使用整数作为参数(除非我传递默认值)。如果我确实需要命名我的所有路由,我如何创建一个路由 url,但在我的请求的“数据”部分传递我的参数?

当前方法:

public static string ResolveWebApiRoute(this UrlHelper urlHelper, string routeName, object routeValues = null)
{
var newRouteValues = new RouteValueDictionary(routeValues);
newRouteValues.Add("httproute", true);

return urlHelper.RouteUrl(routeName, newRouteValues);
}

编辑

当我使用像 Url.RouteUrl(new { controller = ..., action = ...}) 这样的方法时,它会直接重定向到该操作(例如 new { controller = "Reviews", action = "Show"} -->/reviews/show,而我希望它重定向到 /reviews/...

最佳答案

生成指向 Web API 路由的链接始终需要 RouteName,因此您应该具有如下内容:

[Route("{reviewId}/edit", Name="EditView")]
public IHttpActionResult Edit(int reviewId) { ... }

然后您可以生成一个类似于 /reviews/1/edit 的链接到 Web API。

Url.RouteUrl(routeName: "EditView", routeValues: new { httpRoute = true, reviewId = 1 });

Url.HttpRouteUrl(routeName: "EditView", routeValues: , reviewId = 1)

请注意,路由名称需要明确指定,它们不再像@Karhgath 所建议的那样自动生成。这是从 RC 到 RTM 版本所做的更改。

关于c# - 使用属性路由为 Web Api 在 View 中构造 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21186238/

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