2012-04-09 3 views
1

У меня есть старый api, который получает зашифрованный запрос и зашифровывает ответ после его завершения. Я пытаюсь переключить это на mvc4 webapi, и он прошел гладко, пока я не ударил это шифрование. Мне нужно, чтобы расшифровать запрос, когда он приходит, так что mvc будет действовать на него должным образом. Также, как только процесс будет завершен, зашифруйте ответ перед его отправкой. Я не хочу размещать части шифрования в каждом действии.Зашифровать запрос/отклик в MVC4 WebApi

Примечание: Тело по-прежнему должным образом отформатировано как отдельный элемент, поэтому я бы нажал все это на одно действие с помощью собственного селектора, но предпочел бы более правильную реализацию стиля отдыха.

+1

Является ли дешифрование/шифрование какой-либо унаследованной функциональности, потому что SSL станет лучшей техникой для этого требования? – saintedlama

ответ

0

Вы должны быть в состоянии сделать это с MessageHandler. Есть несколько примеров того, как создавать MessageHandlers в WebAPIContrib

0

вы можете реализовать свою собственную модель связующий

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; 
    } 

, а затем Вы зарегистрировать ModelBinder в Global.asx в Application_Start через: ModelBinders.Binders.Add(typeof(DecObj), new DecObjModelBinder());

+0

Это слишком поздно. Действие уже выбрано. Я не хочу, чтобы каждое действие принимало DecObj. Я надеялся получить запрос на самом раннем этапе до того, как действие было выбрано. – Thad

+0

«ActionInvoker» отвечает за вызов действия в начале пути, чтобы он отвечал за параметры действия после того, как «ActionInvoker» вызывает действие «ModelBinder», выполняющее свою работу, а затем фильтры, поэтому «ModelBinder» первое, что отвечает за чтение данных и их связывание –