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引用可以移除。

至此,解決這個問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM