gpt4 book ai didi

asp.net-web-api2 - NSwag 不适用于 ASP.NET Web API 2 和 OWIN。刚收到 404

转载 作者:行者123 更新时间:2023-12-03 22:34:34 34 4
gpt4 key购买 nike

我正在尝试使用 OWIN 在一个新的 Web API 项目上设置 NSwag,但没有运气。我想知道文档是否没有提及某些内容,或者我错过了一步。我正在遵循 Middlewares Wiki 中的说明,但是当我加载默认的 swagger 端点时,我只会得到 404。

我需要做些什么来生成应该在那个位置的内容吗?我一直假设中间件会处理这个问题。

NSwag 是否要求 MVC 成为您项目的一部分?它可以在只是 Web API 的应用程序中工作吗?

我查看了 sample projects但他们都没有将 OWIN 与 ASP.NET Web API 2 一起使用。只有 global.asax 示例和 .Net Core 示例。

如果您愿意,您可以轻松重现我的问题。只需使用 OWIN Web API Starter Template 创建一个新的 ASP.NET Web 应用程序然后从 Middlewares Wiki 执行设置. (创建新项目时, 添加新项目 向导底部附近有一个链接:单击此处在线查找模板。单击该链接并搜索“OWIN Web API 入门模板”。

请让我知道我是否应该提供更多细节。除了发布一堆代码之外,该入门项目应该允许您在 5-10 分钟内重现我的问题。

谢谢!

最佳答案

希望这有帮助,对我有用:

  • 克隆 https://github.com/NSwag/Samples
  • 打开解决方案,我用的是VS2015 update 3
  • 创建一个新的 Owin MVC 项目
    在解决方案中添加新的“ASP.Net web applation (.Net Framework)”项目;我称之为:SampleOwinWebApiWithSwaggerUi ...使用默认的MVC项目模板(MVC复选框被选中),同时选中“Web API”复选框。
    更改认证,选择不认证,点击确定。
    右键单击新项目并选择“设置为启动项目”
  • 添加nuget包...
    右键单击新的 SampleOwinWebApiWithSwaggerUi 项目,单击管理 NuGet 包。添加这个包:
    Microsoft.AspNet.WebApi.Owin(也为您添加了其他依赖项,包括 Owin + Microsoft.Owin + Microsoft.AspNet.WebApi.Owin)
  • 添加一个 web api Controller ......我重新使用了 PersonController.cs 和它来自 SampleWebApiWithSwaggerUi 项目的关联模型 Persons.cs,将 Controller 添加到 ./Controllers 下的新文件夹 ./api 并刚刚更新了命名空间和来自 ' 的语句SampleWebApiWithSwaggerUi' 到 'SampleOwinWebApiWithSwaggerUi'
  • 添加了一个Owin startup.cs文件,右键SampleOwinWebApiWithSwaggerUi项目,添加new,在搜索框中输入'owin',选择OWIN Startup class,将默认名称从Startup1.cs改为Startup.cs,点击Add
  • 添加“NSwag.AspNet.Owin”NuGet 包...再次根据需要添加其他包和更新。
  • 添加“Microsoft.Owin.Host.SystemWeb”NuGet 包
  • 更新 Startup.cs,添加以下几行:

    //来自 https://github.com/NSwag/NSwag/wiki/Middlewares
    var config = new HttpConfiguration();
    app.UseSwaggerUi(typeof(Startup).Assembly, new SwaggerUiOwinSettings());
    app.UseWebApi(config);
    config.MapHttpAttributeRoutes();
    config.EnsureInitialized();

  • 添加这些时,您需要将以下依赖项添加到 using:
    using System.Web.Http;
    using NSwag.AspNet.Owin;
  • 更新 web.config,部分

  • 我从
    <system.webServer>
    <handlers>
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
    <remove name="OPTIONSVerbHandler" />
    <remove name="TRACEVerbHandler" />
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
    </system.webServer>

    到:
    <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true" />
    <handlers>
    <clear />
    <add name="Owin" verb="" path="*" type="Microsoft.Owin.Host.SystemWeb.OwinHttpHandler, Microsoft.Owin.Host.SystemWeb" />
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
    <remove name="OPTIONSVerbHandler" />
    <remove name="TRACEVerbHandler" />
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    <add name="SwaggerIndex" path="swagger/index.html" verb="*" type="NSwag.AspNet.Owin.SwaggerUiIndexMiddleware" />
    <add name="SwaggerGenerator" path="swagger/v1/swagger.json" verb="*" type="NSwag.AspNet.Owin.SwaggerMiddleware" />
    <add name="SwaggerRedirect" path="swagger" verb="*" type="NSwag.AspNet.Owin.RedirectMiddleware" />
    </handlers>
    </system.webServer>

    注意:我没有遵循这里的建议 https://github.com/NSwag/NSwag/wiki/OwinGlobalAsax因为这对我来说失败了:
    <appSettings>
    <add key="owin:AutomaticAppStartup" value="false" />
    </appSettings>

    因为我们确实希望加载 Owin startup.cs。
  • 此时您应该可以使用/swagger,web api 数据可以,但是 MVC 页面不提供诸如 bootstrap.css 之类的静态文件。为了解决这个问题,我遵循了这里的建议:https://stackoverflow.com/a/36297940/445927虽然我更改了 physicalFileSystem 根目录,如下所示。在上面提到的 swagger 添加之后,这个额外的代码应该添加到 startup.cs 的末尾。

  • //要提供静态文件,请参阅: https://stackoverflow.com/a/36297940/445927
    string root = AppDomain.CurrentDomain.BaseDirectory;
    //var physicalFileSystem = new PhysicalFileSystem(Path.Combine(root, "wwwroot"));
    var physicalFileSystem = new PhysicalFileSystem(root));
    var options = new FileServerOptions
    {
    RequestPath = PathString.Empty,
    EnableDefaultFiles = true,
    FileSystem = physicalFileSystem
    };
    options.StaticFileOptions.FileSystem = physicalFileSystem;
    options.StaticFileOptions.ServeUnknownFileTypes = false;
    app.UseFileServer(options);

    最后,您应该让 ASP.Net MVC(带有静态文件)、Web API 和 Swagger 都能正常工作。

    更新:Rico 现在已合并到主仓库: https://github.com/NSwag/Samples

    关于asp.net-web-api2 - NSwag 不适用于 ASP.NET Web API 2 和 OWIN。刚收到 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41131106/

    34 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com