2

オブジェクト型の C# プロパティへの文字列値の JSON 逆シリアル化に問題があり、文字列の配列になってしまいます。

foo.BarGet および Post メソッドの の値は ですがstring[1]{"test"}、 string を期待しています"test"

Foo にDataContract/ DataMember、およびJsonObject/JsonProperty属性を付けてみましたが、同じ結果が得られました。

なぜこれが起こっているのですか?

これは、空の Asp.net MVC3 プロジェクトからの私のコードです。Microsoft.AspNet.WebApi RC nuget パッケージ バージョン 4.0.20505.0 と jquery v 1.7.2 をインストールしました

Get アクションと contentType: "application/json" を含めるように更新されたコードを更新します。

Global.asax

using System;
using System.Collections.Generic;
public class MvcApplication : System.Web.HttpApplication
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
    }

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapHttpRoute(
            name: "WebApi",
            routeTemplate: "api/{controller}"
        );

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", 
                                       id = UrlParameter.Optional }
        );
    }

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);            
    }
}

私のテストコントローラー

using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace WebApiRCTest.Controllers
{
    public class TestController : System.Web.Http.ApiController
    {
        public IEnumerable<string> Get([System.Web.Http.FromUri]Foo foo)
        {
            return new List<string>();
        }
        public void Post([System.Web.Http.FromBody]Foo foo)
        {
            object bar = foo.Bar;
        }
    }
    public class Foo
    {
        public object Bar { get; set; }
    }
}

マイ JavaScript

function post() {
    $.ajax({
        url: "http://localhost:55700/api/ApiTest/",
        type: "GET",
        dataType: "json",
        accept: "application/json",
        contentType: "application/json",
        data: { Bar: "test" }
    })
    $.ajax({
        url: "http://localhost:55700/api/Test/",
        type: "POST",
        dataType: "json",
        accept: "application/json",
        contentType: "application/json",
        data: { Bar: "test" }
    })
}   
4

2 に答える 2

3

これは実際には、JSON ではなく「application/x-www-form-urlencoded」を送信しています。試す:

    $.ajax({
    url: "http://localhost:55700/api/Test/",
    type: "POST",
    dataType: 'json',
    contentType: 'application/json',
    accept: "application/json",
    data: JSON.stringify({ Bar: "test" })
于 2012-06-15T22:52:26.537 に答える
0

私もこの問題に遭遇しました-基本的にそれが言うことを行うJsonFromUriという単純な属性を作成しました。nuget から取得するか、ここで自分で確認できます。

https://github.com/itsdrewmiller/JsonFromUri

于 2013-05-28T14:48:13.893 に答える