J'ai créé un IHttpAsyncHandler
que j'essaye d'appeler en utilisant AJAX, avec jQuery. L'appel réussit, mais je ne trouve pas mes paramètres sur le serveur.Post AJAX sur le site Web ASP.Net est manquant paramètres
Voici l'appel AJAX:
function deleteViewModel(typename) {
var data = {
"viewModel": typename,
"operation": "delete"
};
$.ajax({
type: "POST",
url: "<%= GetAppRoot() %>/viewModelGeneration.ashx",
contentType: "application/json",
cache: false,
data: JSON.stringify(data),
beforeSend: function (xhr, settings) {
$("[id$=processing]").dialog();
},
success: function (data) {
alert('Hey, I succeeded.');
},
error: function (xhr, status, err) {
alert('Play a sad trombone and frown.');
},
dataType: "json"
});
}
L'appel arrive sur le serveur et est géré par mon gestionnaire, mais je ne vois pas non plus les là paramètres viewModel
ou operation
:
public void ProcessRequest(HttpContext context)
{
// Problem is here - no parameters!
var viewModelName = context.Request.Params["viewModel"];
var operation = context.Request.Params["operation"];
// Other stuff...
GenerateResponse(context.Response, jsonResp);
}
J'ai ouvert Fiddler ouvert pour obtenir un coup d'oeil à la demande envoyée par le client, et il me semble que les paramètres sont inclus:
POST http://localhost:4638/admin/viewModelGeneration.ashx HTTP/1.1
Host: localhost:4638
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0
Accept: application/json, text/javascript, */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Content-Type: application/json; charset=UTF-8
X-Requested-With: XMLHttpRequest
Referer: http://localhost:4638/admin/Admin/ResetViewModels.aspx
Content-Length: 123
Cookie: ASP.NET_SessionId=ifmof1ole4yv20jr0frqc0lk; .ASPXFORMSAUTH=836B7EEC539B1304126C156CA20A925DD4FF832E628C807A1CA9DCD00833BDFF36D73C39B9CCFE6EA15CF9FED95157A1CA5F07D588F04A8AFE68ABDBBA82FE9FF8507CB2B471340917616818334BCF0D958CB231A1CA3B9D91B05F2897C44663B5E86FC2FFDFE3C325AB66EC3124144F87B6FC8D3F6C7F92F2FEE745EA71EB333D18E35A7FFA992F8F52FEE509043236
Pragma: no-cache
Cache-Control: no-cache
{"viewModel":"Rds.ViewModels.Updaters.RegionViewModelUpdater, Rds.ViewModels","operation":"delete"}
Je ne suis pas sûr de ce qui se passe qu'ils ne rencontrent pas sur le serveur. Toute réflexion sera apprécié.
MISE À JOUR:
Quelqu'un m'a suggéré que Request.Params ne supporte que les données codées formes. Je mis à jour mon appel AJAX à cela, mais toujours pas côté serveur paramètres:
function updateViewModel(typename, operation) {
var parms = {
"viewModel": typename,
"operation": operation
};
$.ajax({
type: "POST",
url: "/admin/viewModelGeneration.ashx",
contentType: "application/json",
cache: false,
data: parms,
beforeSend: function (xhr, settings) {
$("[id$=processing]").dialog();
},
success: onSuccess,
error: onError
});
}
C'est cool, mais vous dites "data: JSON.stringify (data)". Cela ne devrait-il pas être "data: JSON.stringify (parms)"? –
Ouais, vous avez raison. Mon erreur de transcription du code de la source à ici, en essayant de simplifier autant que possible pour plus de clarté. Corrigé la question. –