Owin SelfHost Asp.net WebApi 遇到 No type was found that matches the controller named 'ControllerName'...

问题背景:在使用普通的SelfHost时,调用其它工程的dll(其实就是把WebApi写到一个单独的工程方便管理),通过加载其他工程的dll然后再访问webapi是没有问题的。

但是在使用Owin SelfHost时,调用其它工程的dll,访问WebApi时会抛出No type was found that matches the controller named 'Contacts',这是因为调用其它工程的dll时,我们需要告诉Owin SelfHost我们要用这个dll,怎么告诉他呢,使用普通的SelfHost那种方法是不可行的,经过各种试验,最后解决方案如下:

序号

过程描述

1

在其他工程中(如OwinSelftHost_webApi)新增一个继承自DefaultAssembliesResolver的类如:AssembliesResolver,重写基类的GetAssemblies方法,重写的内容如下:

 

public override ICollection<Assembly> GetAssemblies()

        {

ICollection<Assembly> baseAssemblies = base.GetAssemblies();

            List<Assembly> assemblies = new List<Assembly>(baseAssemblies);

            var assembly = AppDomain.CurrentDomain.BaseDirectory;

            string path = assembly + "\\" + "OwinSelftHost_webApi.dll";

            var controllersAssembly = Assembly.LoadFrom(path);

            baseAssemblies.Add(controllersAssembly);

            return assemblies;

}

2

Owin SelfHost工程的Startup文件中的Configuration方法新增以下代码:

config.Services.Replace(typeof(IAssembliesResolver), new AssembliesResolver());

注:此代码应位于HttpConfiguration实例化后且在config.Routes.MapHttpRoute之前。

3

其他工程中(如OwinSelftHost_webApi)的System.Net.Http.FormattingSystem.Web.Http,两个引用需要注意,要引用最新的5.2.3.0System.Web引用可以移除。

至此,解决这个问题。

转载于:https://www.cnblogs.com/grok/p/5553957.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值