Swashbuckle с F #: System.InvalidOperationException: «Невозможно найти необходимые службы - PullRequest
0 голосов
/ 11 января 2019

Я создал новый ASP.NET Core Web Application в C # и затем Начните работу с Swashbuckle и ASP.NET Core . Работало отлично.

Я сделал то же самое в F # и столкнулся с этим:

System.InvalidOperationException: 'Unable to 
find the required services. Please add all 
the required services by calling 
'IServiceCollection.AddMvc' inside the call 
to 'ConfigureServices(...)' in the 
application startup code.'

Вот это Startup.fs

namespace ASPNETSwagger

open Microsoft.AspNetCore.Builder
open Microsoft.AspNetCore.Hosting
open Microsoft.AspNetCore.Mvc
open Microsoft.Extensions.Configuration
open Microsoft.Extensions.DependencyInjection
open Swashbuckle.AspNetCore.Swagger

type Startup () =
    new (configuration: IConfiguration) as this =
        Startup() then
        this.Configuration <- configuration

    member _this.ConfigureServices(services: IServiceCollection) =
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2) |> ignore
        services.AddSwaggerGen(fun c -> c.SwaggerDoc("v1", new Info(Title = "My API", Version = "v1")))

    member this.Configure(app: IApplicationBuilder, env: IHostingEnvironment) =
        app.UseSwagger() |> ignore
        app.UseSwaggerUI(fun c -> c.SwaggerEndpoint("swagger/v1/swagger.json", "My API V1")) |> ignore

        if (env.IsDevelopment()) then
            app.UseDeveloperExceptionPage() |> ignore
        else
            app.UseHsts() |> ignore

        app.UseHttpsRedirection() |> ignore
        app.UseMvc() |> ignore

    member val Configuration : IConfiguration = null with get, set

Как мне это исправить?

1 Ответ

0 голосов
/ 12 января 2019
services.AddSwaggerGen(fun c -> c.SwaggerDoc("v1", new Info(Title = "My API", Version = "v1")))

- это выражение, возвращающее IServiceCollection. Содержащий метод ConfigureServices должен возвращать unit. Таким образом, добавление |> ignore в конец этой строки или () в качестве последней строки фиксирует подпись.

Кроме того, эта строка

app.UseSwaggerUI(fun c -> c.SwaggerEndpoint("swagger/v1/swagger.json", "My API V1")) |> ignore

должно быть

app.UseSwaggerUI(fun c -> c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1")) |> ignore

Отсутствовал ведущий /.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...