包装器的原因是解密来自客户端的所有传入请求,进行了加密/解密,以使Net Core Api变得不容易使用。我不喜欢每个人都可以访问我的Net Core API并看到许多尝试来解析我的数据的事实。
因此,我决定仅创建一个控制器,该控制器以Controller和Action的名称接收加密的GET / POST请求。解密/加密逻辑工作正常,但是问题是我需要始终为根控制器创建一个新条件,以标识传递的动作和控制器名称
请问是否可以创建包装器
1)捕捉请求
2)解密其请求对象
3)将请求传递给它所属的动作/控制器
提供更多详细信息:
这是我的RootController,具有一个Process动作(与客户端的所有交互都是通过此root控制器完成的,其余的控制器仅适用于管理员)
[HttpPost]
[Route("")]
public ActionResult Process([FromBody] RootRequest request)
{
//Here I am checking what controller and actions was
if (request.c.ToLower() == "news" && request.a.ToLower() == "getnews")
{
var newsCtrl = new NewsController();
var decrypted = DecryptRequest(request.r);
var reqObject = (NewsRequest)decrypted;
//return this.RedirectToAction<NewsController>(m => m.GetNews());
return newsCtrl.GetNews(reqObject);
}
}
这是我的请求对象:
public class RootRequest {
// Endpoint
public string a { get; set; }
// Contoller
public string c { get; set; }
// Request
public object r { get; set; }
// Key
public string k { get; set; }
}
我要避免创建这种检查:
if (request.c.ToLower() == "news" && request.a.ToLower() == "getnews")
并创建一个中间包装器,该包装器只能解密请求并进一步传递请求
答案 0 :(得分:1)
您正在做的是创建编码梦night。随着它的增长,这将变得难以管理。解决此问题的正确方法是使用某种身份验证(JWT),以防止未经授权的访问。您不想只是为了防止访问而遮盖有效消费者的数据。请看一下有关JWT的更多详细信息:https://jasonwatmore.com/post/2018/08/14/aspnet-core-21-jwt-authentication-tutorial-with-example-api