无法调用服务器端 webmethod 函数
Posted
技术标签:
【中文标题】无法调用服务器端 webmethod 函数【英文标题】:Unable to call server side webmethod function 【发布时间】:2014-10-21 05:05:08 【问题描述】:我正在使用summernote,我想将图像上传到我的网络服务器。下面是我正在使用的代码
默认.aspx
<script type="text/javascript">
$(document).ready(function ()
$('#summernote').summernote(
onImageUpload: function (files, editor, $editable)
alert('image?');
var formData = new FormData();
formData.append("file", files[0]);
$.ajax(
url: "Default.aspx/UploadImage",
data: formData,
type: 'POST',
cache: false,
contentType: false,
processData: false,
success: function (imageUrl)
alert(imageUrl);
if (!imageUrl)
// handle error
return;
editor.insertImage($editable, imageUrl);
,
error: function ()
alert('error');
// handle error
);
console.log('image upload:', files, editor, $editable);
);
);
</script>
默认.asp.cs
[System.Web.Services.WebMethod]
public static string UploadImage(HttpPostedFileBase file)
//Saving to Server
return imageUrl;
但它没有调用服务器端函数。此外,alert(imageUrl) 正在给我完整的页面 html。
我哪里错了?
使用网络信息更新问题(谷歌浏览器)
编辑 2
建议后更新
代码:
url: "About.aspx/UploadImage",
data: "multipart/form-data",
type: 'POST',
cache: false,
contentType: "application/json",
错误:
注意:我已将页面从 Default.aspx 更改为 about.aspx(但代码相同)
【问题讨论】:
检查 URL - “Default.aspx/UploadImage”,这可能是问题所在。为了进一步调试打开 chrome 网络选项卡 (F12) 并检查状态代码和 AJAX 调用的响应。 附带问题,您持有该方法的类是否具有[ScriptService]
属性?
@abhi 我已经上传了我的问题
POST 调用的响应是什么? 400 bad request 也是同一个呼叫的一部分吗?
@Holybreath 在 default.aspx.cs 页面中 public partial class _Default : Page
【参考方案1】:
WebMethod
或“页面方法”expect contentType: "application/json;
其他参考:Scott Guthrie - JSON Hijacking and How ASP.NET AJAX 1.0 Avoids these Attacks:
这就是为什么您的ASP.NET 为基于 GET 和 POST 的 ASP.NET AJAX Web 方法强制实施了一个内置的保护验证层,即不管使用的 HTTP 动词如何,ASP.NET 总是要求将 HTTP Content-Type 标头设置为值 application/json。如果不发送此内容类型标头,ASP.NET AJAX 将拒绝服务器上的请求。
alert
返回页面 (html),您的调用 成功 调用了 page
(default.aspx),但 webmethod
是 不 被调用。
见this for direction/possible solution。
我认为您感到困惑,可能是我的错。我会尽量简化:
链接中的建议是不使用 WebMethod。 为了发送文件,您的contentType
必须是multipart/form-data
查看相关问题:jquery contentType false
但如上所述,WebMethods 要求 contentType
为application/json
它不适用于 WebMethods(因此链接建议使用通用处理程序)。
第...
【讨论】:
感谢您的回答。我尝试使用 contentType:“application/json; charset=utf-8”,也尝试使用 contentType:“application/json”。但现在它将进入错误部分。还有什么我错了吗? @Zerotoinfinite 请参阅link above 了解可能的替代方案/解决方案 - 回复:根据您的代码,您似乎需要发送multipart/form-data
(它不适用于 PageMethods)以上是关于无法调用服务器端 webmethod 函数的主要内容,如果未能解决你的问题,请参考以下文章