共享默认MVC控制器

Kik*_*sen 6 .net asp.net-mvc .net-core

目前我正在构建许多小型API.其中许多项目共享一些基本的控制器逻辑.有没有办法将它们添加到nuget包中,并在启动时使用它们?
例如.喜欢添加Mvc:

IApplicationBuilder app;    
....    

app.UseMvc;
app.UseBasicApiVersionController();
Run Code Online (Sandbox Code Playgroud)

我们的想法是在所有微服务中都有版本端点.
例如:
http:// url/version
返回{"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;
    }
Run Code Online (Sandbox Code Playgroud)

*编辑:
如果您将一个控制器添加到nuget包项目,它将被自动检测.但这不是我想要的功能.
我可能有10个需要该控制器的服务.虽然有1-2个服务只需要其他版本控制逻辑.例如.面向App的客户不应该有"/ version"端点.
这就是为什么我想在启动时使用app.UseBasicApiVersionController();

小智 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));
    }
}
Run Code Online (Sandbox Code Playgroud)