希望这会有所帮助,对我有用:
克隆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 控制器...我重新使用了 PersonController.cs 及其关联模型 Persons.cs 来自 SampleWebApiWithSwaggerUi 项目,将控制器添加到 ./Controllers 下的新文件夹 ./api 中,并刚刚更新了命名空间并使用来自 ' 的语句SampleWebApiWithSwaggerUi' 到 'SampleOwinWebApiWithSwaggerUi'
添加了一个Owin startup.cs文件,右键SampleOwinWebApiWithSwaggerUi项目,新建,在搜索框中输入'owin',选择OWIN Startup类,将默认名称从Startup1.cs改为Startup.cs,点击添加
添加 '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();
添加这些时,您需要将以下依赖项添加到 usings:
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 数据正常,但是诸如 bootstrap.css 之类的静态文件不适用于 MVC 页面。为了解决这个问题,我在这里遵循了建议:https ://stackoverflow.com/a/36297940/445927虽然我更改了物理文件系统根,如下所示。在上面提到的大摇大摆的添加之后,应该将这个额外的代码添加到 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