Multiple types were found that match the controller

醉酒当歌 提交于 2019-12-06 09:49:17

I tried following. Works as of now -

public class CustomControllerSelector : DefaultHttpControllerSelector
{
    //const string partName = "Webapi.Controllers";
    private readonly HttpConfiguration _config;

    public CustomControllerSelector(HttpConfiguration config)
        : base(config)
    {
        _config = config;
    }

    public override System.Web.Http.Controllers.HttpControllerDescriptor SelectController(HttpRequestMessage request)
    {
        var _route = request.GetRouteData();

        var controllerName = base.GetControllerName(request);

        var type = _config.Services.GetAssembliesResolver();
        var controlles = _config.Services.GetHttpControllerTypeResolver().GetControllerTypes(type);

        object name;
        _route.Values.TryGetValue("route", out name);

        //No more hard coding
        var partName = controllers.FirstOrDefault().Namespace;
        var st = name as string;
        if (st != null)
        {
            var conType = controlles.FirstOrDefault(a => a.Namespace == string.Format("{0}.{1}", partName, st));
                        if (conType != null)
                            return new System.Web.Http.Controllers.HttpControllerDescriptor(_config, controllerName, conType);
        }

        return base.SelectController(request);
    }
}

In the WebApiConfig.cs -

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

Test routes -

http://localhost:60957/api/Another/Route/a
http://localhost:60957/api/Another/Route2/aaaaa
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!