Sha*_*lle 118 asp.net-mvc-4 asp.net-web-api
在ASP.NET MVC中,我们有@Url.Action行动.有类似的东西@Url.Api会路由到/ api/controller吗?
Dar*_*rov 137
该ApiController有一个叫做物业地址是类型System.Web.Http.Routing.UrlHelper它允许你建立网址的API控制器.
例:
public class ValuesController : ApiController
{
// GET /api/values
public IEnumerable<string> Get()
{
// returns /api/values/123
string url = Url.Route("DefaultApi", new { controller = "values", id = "123" });
return new string[] { "value1", "value2" };
}
// GET /api/values/5
public string Get(int id)
{
return "value";
}
...
}
Run Code Online (Sandbox Code Playgroud)
此UrlHelper既不存在于您的视图中,也不存在于标准控制器中.
更新:
并且为了在ApiController之外进行路由,您可以执行以下操作:
public class HomeController : Controller
{
public ActionResult Index()
{
string url = Url.RouteUrl(
"DefaultApi",
new { httproute = "", controller = "values", id = "123" }
);
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
或在视图内:
<script type="text/javascript">
var url = '@Url.RouteUrl("DefaultApi", new { httproute = "", controller = "values", id = "123" })';
$.ajax({
url: url,
type: 'GET',
success: function(result) {
// ...
}
});
</script>
Run Code Online (Sandbox Code Playgroud)
注意httproute = ""路线令牌很重要.
显然,这假设DefaultApi在您的RegisterRoutes方法中调用您的Api路由Global.asax:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
Gáb*_*mre 44
它使用更简单的形式,Url.Action因此您不必引用任何路由名称:
Url.Action("ActionName", "ControllerName", new { httproute = "DefaultApi" })
Run Code Online (Sandbox Code Playgroud)
area = ""如果区域内需要URL,您可能需要添加.(默认情况下,Api控制器在区域之外.)我正在使用MVC 4.
希望能够以类型安全的方式生成链接,而不使用硬编码字符串(控制器名称)?
这有一个难题!(它由Mark Seeman撰写)
https://github.com/ploeh/Hyprlinkr
像这样工作:
路线像往常一样:
name: "API Default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
Run Code Online (Sandbox Code Playgroud)
获取网址:
var linker = new RouteLinker(request);
var uri = linker.GetUri<FooController>(r => r.GetById(1337));
Run Code Online (Sandbox Code Playgroud)
结果:
http://localhost/api/foo/1337
Run Code Online (Sandbox Code Playgroud)
小智 6
以下是回答问题的 KISS 方法:
如果这是您用来创建 MVC 控制器 URL 的代码
@Url.Action("Edit", "MyController")
Run Code Online (Sandbox Code Playgroud)
为了获取控制器 API 版本的 URL(假设您使用相同的控制器名称),您可以使用
@Url.Action("Edit", "api/MyController")
Run Code Online (Sandbox Code Playgroud)
Url.Action 方法所做的所有事情就是附加应用程序的根路径,以及控制器名称,后跟操作名称(除非它是“Index”,在这种情况下不会附加。如果路由值对象有一个 id属性值也会附加到 URL 中。
| 归档时间: |
|
| 查看次数: |
83260 次 |
| 最近记录: |