asp.net-mvc-4 config - 如何创建ASP.NET Web API Url?





routes maphttproute (5)


ApiController有一个名为Url的属性,它的类型是System.Web.Http.Routing.UrlHelper ,它允许你为api控制器构建url。

例:

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";
    }

    ...
}

UrlHelper既不存在于您的视图中,也不存在于标准控制器中。

更新:

并且为了在ApiController之外进行路由,您可以执行以下操作:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        string url = Url.RouteUrl(
            "DefaultApi", 
            new { httproute = "", controller = "values", id = "123" }
        );
        return View();
    }
}

或在视图内:

<script type="text/javascript">
    var url = '@Url.RouteUrl("DefaultApi", new { httproute = "", controller = "values", id = "123" })';
    $.ajax({
       url: url,
       type: 'GET',
       success: function(result) {
           // ...
       }
    });
</script>

请注意, httproute = ""路由令牌非常重要。

显然,这假设你的Api路由在Global.asax的RegisterRoutes方法中被称为DefaultApi

routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

在ASP.NET MVC中,我们拥有@Url.Action来执行操作。 是否有类似于@Url.Api路由到/ api / controller?




它使用Url.Action的更简单形式,因此您不必引用任何路由名称:

Url.Action("ActionName", "ControllerName", new { httproute = "DefaultApi" })

如果在区域内需要URL,您可能需要添加一个area = "" 。 (默认情况下,Api控制器在区域之外)。我正在使用MVC 4。




这是用于回答这个问题的KISS方法:

如果这是您用来创建MVC控制器URL的代码

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

为了获得控制器API版本的URL(假设您使用相同的控制器名称),您可以使用

@Url.Action("Edit", "api/MyController")

所有的Url.Action方法正在做的是追加应用程序的根路径,控制器名称,后跟动作名称(除非它是“Index”,在这种情况下它不会被追加。如果路径值对象有一个id属性值也被附加到URL。




希望能够以类型安全的方式生成链接,而不使用硬编码字符串(控制器名称)?

这里有一个nuget! (它由Mark Seeman撰写)

https://github.com/ploeh/Hyprlinkr

像这样工作:

路线,像往常一样:

name: "API Default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }

获取网址:

var linker = new RouteLinker(request);
var uri = linker.GetUri<FooController>(r => r.GetById(1337));

结果:

http://localhost/api/foo/1337



简单的方法发送数组params到web api

API

public IEnumerable<Category> GetCategories([FromUri]int[] categoryIds){
 // code to retrieve categories from database
}

Jquery:发送JSON对象作为请求参数

$.get('api/categories/GetCategories',{categoryIds:[1,2,3,4]}).done(function(response){
console.log(response);
//success response
});

它会生成您的请求网址,如../api/categories/GetCategories?categoryIds=1&categoryIds=2&categoryIds=3&categoryIds=4





asp.net-mvc-4 asp.net-web-api