已经决定我们应该在不同的应用程序之间有一个共同的上传http api。我有一个文件上传控制器,我想在多个webapi项目中使用。
我的上传控制器看起来像这样
namespace MyNamespace
{
[Authorize("PolicyName")]
[Route("Upload")]
public class UploadController : Controller
{
[HttpPost]
[Route("Upload")]
public async Task<IActionResult> Upload(UploadModel model)
{
// impl..
return Ok();
}
}
}
天真的我以为我只是将它提取到一个类库中,我可以注册它,但我找不到怎么样?
无论如何,我不认为这是正确的使用方法。我希望能够配置授权策略名称,并可能配置路由。所以我想我想建立控制器,它的路由和授权设置并注册一些如何?
我对api的想法就像..
((IApplicationBuilder)app).UseUploadController(config => {
config.PolicyName = "Whatever",
config.UploadRoute = "UploadStuff"
});
...这将创建并注册控制器。不知道从哪里开始。我完全不知道如何发现控制器或者是否可以以编程方式注册它们。
任何人都有任何指针或图书馆可以寻找灵感?
答案 0 :(得分:1)
您可以将控制器放在您引用的类库中(如您所愿),然后在任何项目中,您可以从该控制器继承所需的控制器。如果您不想要任何其他功能,可以将子类留空,但如果您想添加某些内容,则可以轻松扩展它。 此外,您可以拥有控制器的任何其他名称,并可以设置不同的路由,授权等。
答案 1 :(得分:0)
如果您在不同的程序集中有一个控制器,那么您可以通过添加适当的引用和修改路由来让MVC应用程序发现它,如this answer中所述
对于配置,传递给属性的值需要是编译时常量,因此在运行MVC应用程序时无法动态设置它们。您可以创建实现逻辑的自定义属性。所以对于Authorize
你会有这样的东西:
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class SetPermissionsAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
// Get everyting you need, for example from Web.config
}
(...)
}
如代码段注释中所述,不同的应用程序可以存储动态值,例如Web.config设置,您可以在属性中读取这些值。
Example自定义AuthorizeAttribute
: