目前我正在构建许多小型API。其中许多项目共享一些基本的控制器逻辑。有没有办法将它们添加到nuget包中并在启动时使用它们? 例如。比如添加Mvc:
IApplicationBuilder app;
....
app.UseMvc;
app.UseBasicApiVersionController();
我们的想法是在所有微服务中都有版本端点
例如:
http://url/version
返回{"版本":" 1.0.0" }
我怎么把它变成一个nuget包呢?
因此,所有开发人员只需添加1行代码即可将此端点添加到其微服务中?我们正在使用dotnet核心
不要自己创建nuget包:)
我对入门的猜测与此类似:
public static IApplicationBuilder UseBasicApiVersionController(this IApplicationBuilder app)
{
if (app == null)
throw new ArgumentNullException("app");
..... // What should I do?
return app;
}
*编辑:
如果您向nuget包项目添加控制器,它将被自动检测。但这不是我想要的功能。
我可能有10个需要该控制器的服务。虽然有1-2个服务只需要其他版本控制逻辑。例如。面向App的客户不应该拥有" / version"端点。
这就是为什么我在启动时想要使用app.UseBasicApiVersionController();
答案 0 :(得分:0)
如果只是版本,您可以添加共享扩展程序或返回版本的中间件。
public class VersionMiddleware: OwinMiddleware
{
private static readonly PathString Path = new PathString("/version");
private OwinMiddleware Next;
public VersionMiddleware(OwinMiddleware next) : base(next)
{
Next = next;
}
public async override Task Invoke(IOwinContext context)
{
if (!context.Request.Path.Equals(Path))
{
await Next.Invoke(context);
return;
}
var version = Assembly.[HowToGetYourVersionAsAnObject]
context.Response.StatusCode = (int)HttpStatusCode.OK;
context.Response.ContentType = "application/json";
context.Response.Write(JsonConvert.SerializeObject(responseData));
}
}