从ajax调用WebApi时如何调试500内部服务器错误?

Bru*_*e C 16 c# asp.net-mvc jquery asp.net-web-api

我在MVC 4.5 WebApi项目中收到500内部服务器错误.我可以通过GET和带有Id​​的GET成功调用我的web服务.但是,当我发布文件时,我收到错误.我可以设置一个断点Application_BeginRequest()并确认我先收到一个OPTIONS请求,然后是POST.控制器中的方法没有被调用,我已经Application_Error()向Global.asax.cs 添加了一个方法,它也没有被命中.html页面正在执行CORS,但我已经使用ThinkTecture.IdentityModel处理了它.我在这里关注文件上传的代码.

有任何想法吗?

这是客户端代码:

    <script type="text/javascript">
        var UploadDocument = function () {
            var url = sessionStorage.getItem("url");
            var auth = sessionStorage.getItem("auth");
            var data = new FormData();

            jQuery.each($('#fileToUpload')[0].files, function (i, file) {
                data.append('file-' + i, file);
            });

            jQuery.support.cors = true;
            $.ajax({
                type: "POST",
                url: url,
                data: data,
                cache: false,
                processData: false,
                contentType: false,
                //dataType: "json",
                headers: { Authorization: 'Basic ' + auth },
                crossDomain: true,
                success: function (data, textStatus, jqXHR) {
                    alert('Success');
                },
                error: function (jqXHR, textStatus, errorThrown) { alert('Error: ' + textStatus + ' ' + errorThrown.message); }
            });
        };

    </script>
Run Code Online (Sandbox Code Playgroud)

我的控制器代码如下所示:

    public int Post(HttpPostedFileBase FileToUpload)
    {
        // Do stuff with the file
    }
Run Code Online (Sandbox Code Playgroud)

请求和响应如下所示:

Request URL:http://localhost:51234/api/TaxDocument
Request Method:POST
Status Code:500 Internal Server Error

Request Headers
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Authorization:Basic YmNhbGxlbjpuZWxsYWM=
Connection:keep-alive
Content-Length:2054044
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryIGzPKhvRVwFXbupu
Host:localhost:51234
Origin:http://localhost:52386
Referer:http://localhost:52386/Upload.html
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4

Response Headers:
Access-Control-Allow-Credentials:true
Access-Control-Allow-Origin:http://localhost:52386
Cache-Control:no-cache
Content-Length:1133
Content-Type:application/json; charset=utf-8
Date:Tue, 06 Nov 2012 21:10:23 GMT
Expires:-1
Pragma:no-cache
Server:Microsoft-IIS/8.0
X-AspNet-Version:4.0.30319
X-Powered-By:ASP.NET
X-SourceFiles:=?UTF-8?B?QzpccHJvamVjdHNcU2F2ZU15VzJcU2F2ZU15VzIuV2Vic2VydmljZVxhcGlcVGF4RG9jdW1lbnQ=?=
Run Code Online (Sandbox Code Playgroud)

Ale*_*kov 35

要查看所有例外情况,请执行以下设置:

  • VS 2013(及以下):调试 - >例外 - > CLR - 检查"何时抛出".
  • VS 2015:调试 - > Windows - >异常设置 - > CLR

如果异常抛出代码之外,您可能需要取消选中"工具 - >选项 - >调试 - >仅我的代码"选项.

  • 非常感谢.选中了Tools-> Options-> Debugging-> General-> Enable Just My Code.我已经启用了打破任何异常.现在我可以看到真正的问题"找到了符合请求的多个操作:" (7认同)
  • 请注意在Exception设置中修改这些任何东西..虽然这对我很有效(允许我从我的WinForms的HttpClient项目发送请求到我的WebApi项目,并调试任何500错误) - 它工作,因为我改变了设置*虽然*WebApi项目正在运行.**但是**,在我关闭WebApi项目之后,下次我启动它时,由于UnauthorizedAccessExceptions,它一直在崩溃..所以,奇怪的是,我的WebApi项目不会重新启动,直到我在我的UNRcked CLR异常中VS 2015 http://stackoverflow.com/a/36301485/1520850 (2认同)