0

更新:この問題は、おそらく、SPA のテンプレートとテクニックを理解していないことが原因です。アップショット ライブラリを無視しようとしましたが、このエラーが発生する前に、テンプレートに手動で多くの変更を加えました。非建設的な閉鎖に投票してください。

ASP.Net MVC4 SPA プロジェクトを実際のタイプのシナリオで試しています。結果はまだそこにないので、クライアント側で WebAPI 部分と JQuery Ajax メソッドを使用した Knockout のみを使用しています。

任意のパラメーターを使用してデータを投稿する必要があるまでは、すべて問題ありませんでした。

これは私のコントローラーです:

public class ProductLineController : DbDataController<WebSiteContext>
{
    [HttpPost]
    public HttpResponseMessage<Order> AddProductLine(int productId, int orderId)
    {
         [invoke logic to add the product line]
         [return the updated order]
    }
}

このコントローラーを呼び出すクライアント コードは、次のように Knockout ビューモデルにあります。

this.addProduct = function (product) {
    var prodId = product.ProductId;

    var requestUrl = baseUrl + "productline";
    $.ajax({
        url: requestUrl,
        cache: false,
        type: 'POST',
        data: JSON.stringify({productId: prodId, orderId: orderId}),
        dataType:"json",
        contentType: 'application/json; charset=utf-8',
        success: function (data) {
            self.order(data);
        }
    });

非常に簡単です。同様の問題を調査した後、jsonパラメーターデータを文字列化するための予防策を講じました。

Fiddler によって報告される要求ヘッダーは次のとおりです。

POST http://localhost:50045/api/orderedproduct HTTP/1.1
Host: localhost:50045
Connection: keep-alive
Content-Length: 27
Origin: http://localhost:50045
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) [snipped]
Content-Type: application/json; charset=UTF-8
Accept: application/json, text/javascript, */*; q=0.01
Referer: http://localhost:50045/Order/Create
Accept-Encoding: gzip,deflate,sdch
Accept-Language: es-ES,es;q=0.8,en-US;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

{"productId":1,"orderId":1}

お気づきのように、JSON は正しくフォーマットされています。しかし、応答はキラー500です

System.Runtime.Serialization.SerializationException
There was an error deserializing the object of type System.Int32. The value '' cannot be parsed as the type 'Int32'.

もちろん、スタックトレースはそれよりもずっと長くなりますが、これは重要な部分です。

ここで私の間違いは何ですか?私はただ迷っています。

4

0 に答える 0