【问题标题】:Encrypt Request/Reponse in MVC4 WebApi在 MVC 4 Web Api 中加密请求/响应
【发布时间】:2012-04-10 10:01:43
【问题描述】:

我有一个旧 api,它接收加密请求并在完成后加密响应。我正在尝试将其切换到 mvc4 webapi,并且在我点击此加密之前它一直很顺利。我需要的是一种在请求进入时解密请求的方法,以便 mvc 正确处理它。此外,一旦该过程完成,请在发送响应之前对其进行加密。我不想在每个动作中放置加密部分。

注意: 主体仍然被正确格式化为单个项目,因此我会使用自己的选择器通过单个操作将其全部推送,但更喜欢更合适的休息样式实现。

【问题讨论】:

  • 解密/加密是否是某种遗留功能,因为 SSL 将是满足此要求的更好技术?

标签: asp.net-mvc rest asp.net-web-api


【解决方案1】:

您应该可以使用 MessageHandler 来执行此操作。 WebAPIContrib中有一堆如何创建MessageHandlers的例子

【讨论】:

    【解决方案2】:

    您可以实现自己的模型绑定器

    public class DecObjModelBinder : IModelBinder
    {   
    
    
      public object BindModel(ControllerContext controllerContext, 
          ModelBindingContext bindingContext)
       {
        //make a instance of your object
        var myObj = new DecObj()
    
        //bind the properties from my obj
    
        myObj.Title= bindingContext
            .ValueProvider
            .GetValue("Title") // The Property name sent from the browser
            .ToString();
    
        /* then the property you want to decrypt */
        var encBody = bindingContext
            .ValueProvider
            .GetValue("EncBody") // The Property name sent from the browser
            .ToString();
    
        /* decryption logic here to the encBody then after assign the decrypted value to myObj*/
    
        return myObj;
       }
    

    然后您通过 ModelBinders.Binders.Add(typeof(DecObj), new DecObjModelBinder()); 在 Application_Start 的 Global.asx 中注册 ModelBinder

    【讨论】:

    • 这个过程太晚了。该操作已被选中。我不希望每个动作都接受 DecObj。我希望在选择操作之前尽早收到请求。
    • ActionInvoker 负责在管道的早期调用动作,以便在 ActionInvoker 调用动作之后负责动作参数 ModelBinder 完成其工作,然后过滤器,因此ModelBinder 是负责读取数据并绑定它们的第一件事
    猜你喜欢
    • 2019-11-28
    • 1970-01-01
    • 2012-11-09
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 2013-04-17
    • 2021-05-05
    • 2017-11-22
    相关资源
    最近更新 更多