Как настроить OWIN Web API 1 через IAppBuilder - PullRequest
2 голосов
/ 21 июня 2019

TL; DR: как настроить OWIN Web API 1 через класс StartUp или, в качестве альтернативы, использовать HttpSelfHostServer с расширением статических файлов?

У меня есть работающий автономный OWINПроект Web API 2, который я бы хотел понизить до .Net 4.0 - я бы предпочел не устанавливать замену платформы .Net 4.5+ из-за неизвестных побочных эффектов на производственном компьютере .

Я не могу использовать Microsoft.AspNet.WebApi.OwinSelfHost, потому что он недоступен для .Net 4.0, и поэтому я не могу вызвать метод расширения IAppBuilder.useWebApi() для регистрации моей конфигурации.

Я сейчас загружаю сервер так: WebApp.Start(Of StartUp)(url:="...")
и класс StartUp выглядит следующим образом, , но я не могу установить конфигурацию :

Public Class StartUp
Public Sub Configuration(app As IAppBuilder)
    ' the host should be obsolete, as it's already configured in the app context
    Dim config As New HttpSelfHostConfiguration("http://localhost:9000")

    ' config.MapHttpAttributeRoutes()
    config.Routes.MapHttpRoute(
        name:="DefaultApi",
        routeTemplate:="api/{controller}/{id}",
        defaults:=New With {.id = RouteParameter.Optional}
    )

    ' configure formatters, converters, filters ...

    ' app.UseWebApi(config)

    Dim physicalFileSystem As New PhysicalFileSystem("...\static")
    app.UseDefaultFiles(New DefaultFilesOptions With {.FileSystem = physicalFileSystem})
    app.UseStaticFiles(New StaticFileOptions With {.FileSystem = physicalFileSystem, .ServeUnknownFileTypes = True})
End Sub
End Class

ЕслиЯ бы использовал документированный подход Web API 1 для начальной загрузки сервера (см. Ниже), я не знаю, как настроить расширение статических файлов:

var config = new HttpSelfHostConfiguration("http://localhost:8080");

config.Routes.MapHttpRoute(
    "API Default", "api/{controller}/{id}", 
    new { id = RouteParameter.Optional });

using (HttpSelfHostServer server = new HttpSelfHostServer(config)) {
    server.OpenAsync().Wait();
    Console.WriteLine("Press Enter to quit.");
    Console.ReadLine();
}

Хотя я 'проверил источники AspNetWebStack , я думаю, что обработка сообщений hкак изменилось между V2.1.0 и V5.0.0 +, и поэтому я не могу применить этот подход.

Я использую следующие пакеты nuget - которые я мог бы уменьшить после его работы:

<packages>
  <package id="Microsoft.AspNet.WebApi.Client" version="4.0.20710.0" targetFramework="net40" />
  <package id="Microsoft.AspNet.WebApi.Core" version="4.0.20710.0" targetFramework="net40" />
  <package id="Microsoft.AspNet.WebApi.SelfHost" version="4.0.30506.0" targetFramework="net40" />
  <package id="Microsoft.Net.Http" version="2.0.20710.0" targetFramework="net40" />
  <package id="Microsoft.Owin" version="2.1.0" targetFramework="net40" />
  <package id="Microsoft.Owin.Diagnostics" version="2.1.0" targetFramework="net40" />
  <package id="Microsoft.Owin.FileSystems" version="2.1.0" targetFramework="net40" />
  <package id="Microsoft.Owin.Host.HttpListener" version="2.1.0" targetFramework="net40" />
  <package id="Microsoft.Owin.Host.SystemWeb" version="2.1.0" targetFramework="net40" />
  <package id="Microsoft.Owin.Hosting" version="2.1.0" targetFramework="net40" />
  <package id="Microsoft.Owin.SelfHost" version="2.1.0" targetFramework="net40" />
  <package id="Microsoft.Owin.StaticFiles" version="2.1.0" targetFramework="net40" />
  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net40" />
  <package id="Newtonsoft.Json" version="4.5.6" targetFramework="net40" />
  <package id="Owin" version="1.0" targetFramework="net40" />
</packages>

Btw.хотя я использовал VB.Net в этом примере, не стесняйтесь использовать предпочитаемый вами язык в своем ответе.

...