c# - with - visual studio web api tutorial




ajaxからWebApiを呼び出すときに500 Internal Server Errorをデバッグする方法を教えてください。 (2)

すべての例外を確認するには、次の設定をオンにします。

  • VS 2013(およびそれ以降):[デバッグ] - > [例外] - > [CLR] - 「投入時」を確認します。
  • VS 2015:デバッグ - >ウィンドウ - >例外設定 - > CLR

あなたのコードの外で本当に例外が投げられるのなら、 "Tools-> Options-> Debugging-> My code only"オプションのチェックを外す必要があるかもしれません。

MVC 4.5 WebApiプロジェクトで500 Internal Server Errorを受け取ります。 GETとIdを使用したGETを使用して、自分のWebサービスを正常に呼び出すことができます。 しかし、ファイルをPOSTするとエラーになります。 Application_BeginRequest()ブレークポイントを設定し、最初にOPTIONSリクエストを受信して​​からPOSTを受信して​​いることを確認できます。 コントローラ内のメソッドが呼び出されていないと私もヒットしないGlobal.asax.csにApplication_Error()メソッドを追加しました。 HTMLページはCORSを実行していますが、私は既にThinkTecture.IdentityModelを使用してそれを処理しThinkTecture.IdentityModel 。 私はファイルアップロードのためのコードをhereに従っています。

何か案は?

これがクライアントコードです。

    <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>

私のコントローラコードはこのようになります:

    public int Post(HttpPostedFileBase FileToUpload)
    {
        // Do stuff with the file
    }

要求と応答は次のようになります。

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=?=

リクエストを処理しているHttpApplicationオブジェクトのErrorイベントに登録してみてください。

HttpApplicationReference.Error += ErrorHandler;

エラーを処理するメソッド

public void ErrorHandler(object sender, EventArgs e)
{
    System.Diagnostics.Debug.Write(
        ((System.Web.HttpApplication)sender).Server.GetLastError().ToString()
    );
}




asp.net-web-api