2012-06-20 3 views
0

Я работаю над asp.net web api. Я пытаюсь сделать вызов для контроллера (Security), используя jquery ajax calls. У меня есть метод в мой контроллер с 3-мя параметрами, такими как,Как передать параметры методу в контроллере через jquery ajax calls

public WebRequest GetRequest(string method,string type,string endpoint) 
     { 
     RSACryptoServiceProvider rsa=new RSACryptoServiceProvider(); 
     var request = WebRequest.Create(endpoint); 
     request.Method = method; 
     request.ContentType = type; 
     UnicodeEncoding enc = new UnicodeEncoding(); 
     ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; 
     request.Headers.Add("Authorization-Token", RSAClass.StringConverter(RSAClass.RSAEncrypt(enc.GetBytes("User1"), rsa.ExportParameters(false), false))); 
     return request; 
} 

и я делаю JQuery Ajax вызова, как,

CreateRequest("GET", "application/json;charset=utf-8", "http://localhost:49847/api/Security", function (request) { alert("Hello"); }); 


function CreateRequest(method, type, endpoint, callback) { 
     $.ajax({ 
      url: "api/Security", 
      data: { method: method, type: type, endpoint: endpoint }, 
      type: "GET", 
      contentType: "application/json;charset=utf-8", 
      statusCode: { 
       200: function (request) { 
        callback(request); 
       } 
      } 
     }); 

, а также у меня есть класс customfilterattribute для подтверждения токен авторизации, как,

public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext) 
     { 
      string token; 
      try 
      { 
       token = actionContext.Request.Headers.GetValues("Authorization-Token").First(); 
      } 
      catch 
      { 
       actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.BadRequest) { Content = new StringContent("missing authorization token") }; 
       return; 
      } 
      try 
      { 
       RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(); 
       UnicodeEncoding enc = new UnicodeEncoding(); 
       AuthUsersRepository.GetAllUsers().First(x => x.Name ==enc.GetString(RSAClass.RSADecrypt(RSAClass.ByteConverter(token), RSA.ExportParameters(true), false))); 
       base.OnActionExecuting(actionContext); 
      } 
      catch 
      { 
       actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Forbidden) { Content = new StringContent("Unauthorized User") }; 
       return; 
      } 
     } 

, когда iam делает первый запрос, запрашивая у меня токен авторизации. а также отображение нулевых значений в трех параметрах (метод, тип, конечная точка). веди меня.

ответ

2

Вам нужно это:

data: { 'method': method, 'type': type, 'endpoint': endpoint }, 

Это передает значения в запросе, хотя в вашем примере я не знаю, почему вы должны пройти конечную точку в качестве параметра метода, если его значение является URL-адрес контроллера/действия?

+0

GET не может иметь содержание. – Aliostad

+0

@Aliostad вы можете передавать данные в GET или POST. В документации указано, что данные будут добавлены в строку запроса для GET. http://api.jquery.com/jQuery.ajax/ – Fenton

+0

Спасибо. Можете ли вы обновить свой пост, чтобы я мог изменить свой -1 на +1? – Aliostad

0

Вы либо должны

1) изменить GET на POST данные в формате JSON. GET не может иметь контент. 2) Передать данные в виде запроса параметров строки

Если я должен сделать это сам, я пошел бы для случая 2:

http://localhost:49847/api/Security?method=someMethod&type=someType&endpoint=someendpoint 

Поскольку это связано безопасности, он должен быть HTTPS.

Но я бы не сделать это сам, вместо того, чтобы использовать то, что разработали эксперты в области безопасности: «Thinktecture.IdentityModel.40»

https://github.com/thinktecture/Thinktecture.IdentityModel.40

+1

Вам не нужно конвертировать в POST или вручную записывать запрос. Проверьте документацию jQuery: http://api.jquery.com/jQuery.ajax/ – Fenton

Смежные вопросы