WebApi路由 - 将网址映射到api

时间:2014-01-12 15:04:09

标签: asp.net-mvc asp.net-web-api

我一直在谷歌搜索大约一个小时而没有找到一个例子所以我想我会在这里问。

我正在使用webapi替换标准的mvc控制器并且路由有问题,我因为组织而更改了名称,但它们仍然有效。

我的webapi目前在控制器文件夹中称为SystemAPI - 我希望它的名称与理想情况下指向它的URL不同。

我需要指向它的url是/ v1Controller / {id} 我无法更改v1Controller URL,因为它是我无法控制的应用程序的固定点

我目前的编码尝试是

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
            name: "DocumobiApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        config.Routes.MapHttpRoute(
            name: "V1Controller",
            routeTemplate: "v1Controller/{id}",
            defaults: new { id = RouteParameter.Optional }
            );

        // Uncomment the following line of code to enable query support for actions with an IQueryable or IQueryable<T> return type.
        // To avoid processing unexpected or malicious queries, use the validation settings on QueryableAttribute to validate incoming queries.
        // For more information, visit http://go.microsoft.com/fwlink/?LinkId=279712.
        //config.EnableQuerySupport();

        var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().FirstOrDefault();
        jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
        config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
    }
}

我得到了回复

"message":"No HTTP resource was found that matches the request URI 'http://localhost:38685/v1Controller'.","messageDetail":"No route providing a controller name was found to match request URI 'http://localhost:38685/v1Controller'"}

我确信它的东西相当明显但不能让我的生活明白。

干杯,

史蒂芬

2 个答案:

答案 0 :(得分:1)

如下面的错误消息所示,路由匹配应该为Web API提供的controller路由变量提供值,以便选择控制器。

No route providing a controller name was found to match request URI 'http://localhost:38685/v1Controller

所以你可以像下面那样修改路线(注意controller变量的默认值):

config.Routes.MapHttpRoute(
            name: "V1Controller",
            routeTemplate: "v1Controller/{id}",
            defaults: new { id = RouteParameter.Optional, controller="SomeControllerHere" }
            );

答案 1 :(得分:0)

确保控制器上的操作方法具有默认值的ID。