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

    至此,解决这个问题。

  • 相关阅读:
    微信小程序 简单控件
    #负分小组WEEK1#一个开头&小组介绍
    CountDownLatch使用场景及分析
    Markdown基础语法
    【转】awk的使用及字符串的操作
    【开篇有益】敢问路在何方,佛曰路就在脚下
    【EntityFramework 6.1.3】个人理解与问题记录(2)
    EETOOL简介
    VMware 安装失败 “Failed to create the requested registry key Key:installer Error:1021"
    vs2010调试时为什么会出现clr.dll与mscordacwks.dll版本不匹配?
  • 原文地址:https://www.cnblogs.com/grok/p/5553957.html
Copyright © 2020-2023  润新知