C# / JQuery Web 服务调用给出 500 错误
本文关键字:错误 调用 服务 JQuery Web | 更新日期: 2023-09-27 18:32:24
这让我很困惑 - 我不知道问题是什么!
此调用始终返回 500 错误:
查询:
$('body').on('click', '.day', function () {
// a suspect day has been clicked
if (confirm('Re-index documents received on this day?')) {
// re-index
var day = $(this).find('.day_number').text();
var year = parseInt($('#hidYear').val());
var month = parseInt($('#hidMonth').val());
$.ajax({
type: "POST",
url: "ajax.asmx/ReIndexDay",
data: JSON.stringify( { Month: month, Year: year, Day: day } ),
contentType: "application/xml; charset=utf-8",
dataType: "xml",
success: function (data) {
var calendarHTML = $(data).find(':first').text();
// update hidden fields and calendar
$('#hidYear').val(year);
$('#hidMonth').val(month);
$('#divContent').html(calendarHTML);
},
error: function (msg) {
alert("Failed: " + msg.status + ": " + msg.statusText);
}
});
}
});
C#
[WebMethod(Description = "Re-index the day and return HTML of a calendar table for the month")]
[ScriptMethod(ResponseFormat = ResponseFormat.Xml)]
public string ReIndexDay(int Day, int Month, int Year)
{
Diagnostic.ReIndex(Day, Month, Year);
return GetIndexCalendarHTML(Month, Year);
}
我现在被困住了,所以所有的建议都值得赞赏!
[编辑]
我从浏览器中得到了这个 - 不确定它是否准确,因为它可能不会重现相同的内容:
System.InvalidOperationException: 请求格式无效: application/xml; charset=UTF-8. at System.Web.Services.Protocols.HttpServerProtocol.ReadParameters() at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()
[/编辑]
发送 JSON,但内容类型设置为 XML。 尝试将其更改为此内容。
contentType: 'application/json; charset=utf-8',
除了将内容类型设置为:
contentType: 'application/json; charset=utf-8',
而不是像你那样的XML(正如@Zachary所说(我在评论:)中说)。您还需要实际发回 XML。
谚语:
[ScriptMethod(ResponseFormat = ResponseFormat.Xml)]
实际上不会将字符串编码为 XML,它所做的只是将 Content-type 标头设置为:
Content-Type: text/xml; charset=utf-8.
您实际上必须返回 XML。这有点误导。
编辑:实际上,让我来修正一下。它执行 XML,除非您发送字符串。你可以通过这样做让它用XML包装你的字符串:
[ScriptMethod(ResponseFormat = ResponseFormat.Xml, XmlSerializeString=true)]