SDammann.WebApi.Versioning:asp.net版本控制

时间:2014-08-11 15:35:29

标签: c# asp.net-web-api asp.net-web-api-routing

config.Routes.MapHttpRoute(
    name: "Route1",
    routeTemplate: "api/v{version}/Participant/{action}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

config.Routes.MapHttpRoute(
    name: "Route2",
    routeTemplate: "api/v{version}/{controller}/{action}/{id}",
    defaults: new { id = RouteParameter.Optional },
    constraints: null,
    handler : new TokenValidationHandler() 
);

我的控制器是ParticipantController

如果我添加两个路由,则会从SDamman dll抛出异常(对象空引用错误)。我需要两条路线,仅为" Route2"添加MessageHandler

有人可以帮助我吗?

我在global.asax.cs文件

中添加了以下行
GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerSelector),
                    new RouteVersionedControllerSelector(GlobalConfiguration.Configuration));

由于我使用的是.Net framework版本4,我使用了包id =" SDammann.WebApi.Versioning"版本=" 2.0.0.3" targetFramework =" net40"

异常详情

  

类型' System.NullReferenceException'的例外情况发生在   SDammann.WebApi.Versioning.dll但未在用户代码中处理

     

附加信息:对象引用未设置为的实例   对象

     

在   SDammann.WebApi.Versioning.VersionedControllerSelector.GetControllerNameFromRequest(HttpRequestMessage   请求)在z:\ Developing \ Visual   工作室\项目\ SDammann.WebApi.Versioning的\ src \ SDammann.WebApi.Versioning \ VersionedControllerSelector.cs:行   187点   SDammann.WebApi.Versioning.RouteVersionedControllerSelector.GetControllerIdentificationFromRequest(HttpRequestMessage   请求)在z:\ Developing \ Visual   工作室\项目\ SDammann.WebApi.Versioning的\ src \ SDammann.WebApi.Versioning \ RouteVersionedControllerSelector.cs:行   34点   SDammann.WebApi.Versioning.VersionedControllerSelector.SelectController(HttpRequestMessage   请求)在z:\ Developing \ Visual   工作室\项目\ SDammann.WebApi.Versioning的\ src \ SDammann.WebApi.Versioning \ VersionedControllerSelector.cs:行   112点   System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsyncInternal(HttpRequestMessage   请求,取消语音取消语言)   System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsync(HttpRequestMessage   请求,取消语音取消语言)

1 个答案:

答案 0 :(得分:0)

我发现问题是什么。我错过了在Route1中添加默认控制器。

工作代码:

config.Routes.MapHttpRoute(
    name: "Route1",
    routeTemplate: "api/v{version}/Participant/{action}/{id}",
    defaults: new { controller: "Participant", id = RouteParameter.Optional }
);