with tutorial net framework example asp asp.net-web-api multiple-projects self-host

asp.net web api - tutorial - Autoaplicación de AspNet WebAPI con clases de controladores en diferentes proyectos



web api rest c# (1)

Creé un Asphalt WebAPI SelfHosted con Visual Studio 2012 (.NET Framework 4.5). He habilitado SSL para la WebAPI. Funciona bien cuando el controlador está definido en el mismo proyecto.

Pero cuando agrego una referencia de otro proyecto que contiene controladores, me da el siguiente error:

No HTTP resource was found that matches the request URI ''https://xxx.xxx.xxx.xxx:xxxx/hellowebapi/tests/''.

Creé clases personalizadas para HttpSelfHostConfiguration y MessageHandler.

Cualquier ayuda para resolver este problema sería un gran momento para mí.

Agradeciendo de antemano.


Puede escribir un solucionador de ensamblajes simple y personalizado que se asegure de que el ensamblaje al que se hace referencia se carga para que la sonda del controlador funcione.

A continuación hay una buena publicación de Filip al respecto:
http://www.strathweb.com/2012/06/using-controllers-from-an-external-assembly-in-asp-net-web-api/

Muestra:

class Program { static HttpSelfHostServer CreateHost(string address) { // Create normal config HttpSelfHostConfiguration config = new HttpSelfHostConfiguration(address); // Set our own assembly resolver where we add the assemblies we need CustomAssembliesResolver assemblyResolver = new CustomAssembliesResolver(); config.Services.Replace(typeof(IAssembliesResolver), assemblyResolver); // Add a route config.Routes.MapHttpRoute( name: "default", routeTemplate: "api/{controller}/{id}", defaults: new { controller = "Home", id = RouteParameter.Optional }); HttpSelfHostServer server = new HttpSelfHostServer(config); server.OpenAsync().Wait(); Console.WriteLine("Listening on " + address); return server; } static void Main(string[] args) { // Create and open our host HttpSelfHostServer server = CreateHost("http://localhost:8080"); Console.WriteLine("Hit ENTER to exit..."); Console.ReadLine(); } } public class CustomAssembliesResolver : DefaultAssembliesResolver { public override ICollection<Assembly> GetAssemblies() { ICollection<Assembly> baseAssemblies = base.GetAssemblies(); List<Assembly> assemblies = new List<Assembly>(baseAssemblies); var controllersAssembly = Assembly.LoadFrom(@"C:/libs/controllers/ControllersLibrary.dll"); baseAssemblies.Add(controllersAssembly); return assemblies; } }