相关疑难解决方法(0)

在包含Controllers和ApiControllers的项目中从ApiController和Action名称获取Url

现有项目具有从以下任一项继承的控制器:

  • Controller:RouteTable.Routes.MapRoute"{controller}/{action}/{id}".
  • ApiController:GlobalConfiguration.Configure并在回调MapRoute"api/{controller}/{id}".

一切正常,但我需要在这两种类型的控制器中生成动作方法的URL.鉴于:

  1. 继承自其中任何一个的控制器的名称或类型,和
  2. 动作方法名称

然后从网站方面,我如何为Web API方面生成正确的URL?

我正在使用反射来获取动作和控制器名称,然后通过使用UrlHelper.Action(actionName, controllerName, routeValueDictionary)我获取网站路由的正确URL.

但是,这种方法(当然)为WebAPI方面生成这样的URL:/ApiControllerName/Get?parameter1=value当它需要时,/api/ApiControllerName?parameter1=value以及它是GET请求的单独知识.

目的:这是针对网站的烟雾测试页面,该页面使用属性和反射来决定吸烟测试的内容.能够在整个项目中使用相同的属性会很好,而且能够使用UrlHelper知道路由表的正确的并且可以产生正确的前缀(例如/api/,而不是代码)将是非常好的.假设,也许是错误地,API路线已注册,api而不是,例如webapi.

更新

在继续研究之后,我发现Url.HttpRouteUrl可以生成WebAPI URL 方法,但这需要知道路由名称,而不是操作方法名称.

我已经对此做了更多的研究,并且没有更接近解决方案.看起来如果您知道相应路线的路线名称,您可以轻松地制作一个URL.这里这里也有一些可能的提示.但是,如果有多个WebApi路由,您如何知道哪个路由与您想要的控制器和操作相匹配?重新实现MVC本身在选择控制器和动作方面已经做的事情将是愚蠢的.我想我可以使用每个WebApi路由从给定参数构造一个URL,然后通过它的步调运行URL(使用上面的一些链接)并查看它是否与所需的控制器匹配... yuck.

必须有一个更简单的方法.

现在我将不得不继续前进,但是希望有人可以帮助我.

c# asp.net-mvc asp.net-web-api

10
推荐指数
1
解决办法
5890
查看次数

WebAPI控制器中的MVC路由

关于MVC和WebAPI中的路由的快速问题.我添加了路由config.cs的路由:

        routes.MapRoute(
            name: "ConfirmEmail",
            url: "ConfirmEmail/{userid}",
            defaults: new { controller = "Email", action = "ConfirmEmail" }
        );
Run Code Online (Sandbox Code Playgroud)

这是按照正常情况在global.asax中注册的:

RouteConfig.RegisterRoutes(RouteTable.Routes);
Run Code Online (Sandbox Code Playgroud)

我正在尝试生成一个URL,以便在电子邮件中使用,该电子邮件是作为WebAPI控制器函数中的函数调用的一部分发送的.我正在使用UrlHelper.Link函数尝试生成一个URL,但是我收到一条错误,说明无法通过名称找到该路由:

var url = Url.Link("ConfirmEmail", new { userid = "someUserId" });
Run Code Online (Sandbox Code Playgroud)

现在我的印象是路由字典在MVC和WebAPI控制器上下文中共享但是我看不到传入Web API调用的路由字典中的MVC路由(在Request对象上),但是我已经定义了WebAPI路由.

我错过了什么吗?

asp.net-mvc asp.net-mvc-routing asp.net-web-api asp.net-web-api-routing asp.net-web-api2

5
推荐指数
2
解决办法
2487
查看次数