无法调用服务器端 webmethod 函数

Zer*_*ity 2 asp.net jquery webmethod

我正在使用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>
Run Code Online (Sandbox Code Playgroud)

默认.asp.cs

[System.Web.Services.WebMethod]
    public static string UploadImage(HttpPostedFileBase file)
    {
        //Saving to Server

        return imageUrl;
    }
Run Code Online (Sandbox Code Playgroud)

但它不是调用服务器端函数。另外,alert(imageUrl) 给了我完整的页面 html。

我错在哪里?

使用网络信息更新问题(谷歌浏览器)

在此处输入图片说明

编辑 2

建议后更新

代码

 url: "About.aspx/UploadImage",
                   data: "multipart/form-data",
                   type: 'POST',
                   cache: false,
                   contentType: "application/json",
Run Code Online (Sandbox Code Playgroud)

错误

在此处输入图片说明

注意:我已将 Page 从 Default.aspx 更改为 about.aspx(但代码相同)

EdS*_*dSF 5

WebMethod或“页面方法”期望contentType: "application/json;

附加参考:Scott Guthrie - JSON 劫持以及 ASP.NET AJAX 1.0 如何避免这些攻击

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调用。

请参阅此方向/可能的解决方案


我觉得你有点糊涂了,可能是我的错。我会尽量简化:

  • 链接中的建议使用 WebMethod。
  • 为了发送文件/s,您contentType必须是multipart/form-data
  • 但正如上面提到的,的WebMethods要求 contentTypeapplication/json
  • 它不适用于 WebMethods(因此链接建议使用通用处理程序)。

嗯...