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.Formatting、System.Web.Http,两个引用需要注意,要引用最新的5.2.3.0,System.Web引用可以移除。 |
至此,解决这个问题。
Owin SelfHost Asp.net WebApi 遇到 No type was found that matches the controller named 'ControllerName' 异常的解决方案的更多相关文章
- 使用 OWIN Self-Host ASP.NET Web API 2
Open Web Interface for .NET (OWIN)在Web服务器和Web应用程序之间建立一个抽象层.OWIN将网页应用程序从网页服务器分离出来,然后将应用程序托管于OWIN的程序而离 ...
- VS2015创建的Asp.net WebApi默认项目在CentOS7+Mono4.2.2+jexus5.8运行不起来的解决方案
主要原因是Web.config配置的问题. 修改成如下内容: <?xml version="1.0" encoding="utf-8"?> < ...
- 基于ASP.NET WebAPI OWIN实现Self-Host项目实战
引用 寄宿ASP.NET Web API 不一定需要IIS 的支持,我们可以采用Self Host 的方式使用任意类型的应用程序(控制台.Windows Forms 应用.WPF 应用甚至是Windo ...
- Use OWIN to Self-Host ASP.NET Web API 2
Open Web Interface for .NET (OWIN)在Web服务器和Web应用程序之间建立一个抽象层.OWIN将网页应用程序从网页服务器分离出来,然后将应用程序托管于OWIN的程序 ...
- ASP.NET WebApi OWIN 实现 OAuth 2.0
OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. OAuth 允许用户提供一个令牌, ...
- 使用ASP.Net WebAPI构建REST服务(六)——Self-Host
Asp.Net WebAPI生成的是一个程序集,并不是独立的进程,因此,要运行的时候必须将其承载在相应的宿主上,一般比较常见的是IIS承载.很多时候,我们为了简化部署或者功能集成,需要将其承载到独立的 ...
- [转]ASP.NET WebApi OWIN 实现 OAuth 2.0
OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. OAuth 允许用户提供一个令牌, ...
- 基于OWIN ASP.NET WebAPI 使用OAUTH2授权服务的几点优化
前面在ASP.NET WEBAPI中集成了Client Credentials Grant与Resource Owner Password Credentials Grant两种OAUTH2模式,今天 ...
- ASP.NET WebApi OWIN 实现 OAuth 2.0(自定义获取 Token)
相关文章:ASP.NET WebApi OWIN 实现 OAuth 2.0 之前的项目实现,Token 放在请求头的 Headers 里面,类似于这样: Accept: application/jso ...
随机推荐
- javascript Date
转:http://blog.csdn.net/vbangle/article/details/5643091# // 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日( ...
- STM8 EEPROM:
stm8的EEPROM的搽除是写0,FLASH_PRO与FLASH_DATA写的秘钥顺序相反 EEPROM读写前要解锁的.这个很简单,在技术文档里讲得很清楚.我用一个宏定义来代表EEPROM单元.#d ...
- win上搭建react-native android环境
http://www.jianshu.com/p/2fdc4655ddf8 http://www.lcode.org/ http://www.jianshu.com/p/ad29d97b0e9d 学习 ...
- c++ 一些随笔
1. A region of source code where any use of the unqualified name (that is, as a plain identifier) re ...
- PHP 返回13位时间戳
13位时间戳生成函数如下所示: private function getMillisecond() { list($t1, $t2) = explode(' ', microtime()); retu ...
- ThinkPHP3.2.3 跨域访问
其他程序调用tp项目的action时需要进行跨域设置,在tp项目根目录下添加crossdomain.xml文件. 文件内容: <?xml version="1.0"?> ...
- 双系统先装Windows,后装linux的原因
由于windows在安装时,boot loader会预设装在MBR及分割槽的boot sector中,而且并不提供开机选单:而linux在安装时安装程序可以选择是安装在MBR中还是boot secto ...
- php源码之遍历目录下的所有的文件
<?php //遍历目录下的所有的文件 -- 递归调用 // http://www.manongjc.com/article/1495.html function get_all_file1($ ...
- JSP+Servlet中使用jspsmartupload.jar进行图片上传下载
JSP+Servlet中使用cos.jar进行图片上传 upload.jsp <form action="FileServlet" method="post&quo ...
- 在 Typescript 2.0 中使用 @types 类型定义
在 Typescript 2.0 中使用 @type 类型定义 基于 Typescript 开发的时候,很麻烦的一个问题就是类型定义.导致在编译的时候,经常会看到一连串的找不到类型的提示.解决的方式经 ...