ASP.net 网站 API 2 AJAX 发送 JSON 和 return JSON

ASP.net Web API 2 AJAX sending JSON and return JSON

net Web API 2. 我想将 JSON 字符串发送到我的 POST 函数之一,然后 return JSON 返回给它.

我的AJAX:

$("#btnPost").click(function (event) {
 var sqlQ = "SELECT TOP 50 LTRIM(RTRIM(REPLACE(OID, ' ', ''))) FROM vwPS_DAT WHERE OID != ''";

   $.ajax({
       type: "POST",
       crossDomain: true,
       dataType: 'json',
       async: true,
       cache: false,
       contentType: "application/json",
       url: "api/FEB/testJSON/",
       data: JSON.stringify({ qString: [sqlQ] }),
       success: function (result) {
              var obj = jQuery.parseJSON(data);
              console.log(obj);
       },
       error: function (xhr, status, error) {
              var err = eval("(" + xhr.responseText + ")");
              $("#txtResult").val(err.Message)
       }
   });
}

控制者:

[HttpPost]
public string testJSON([FromBody]List<string> qString)
{
    System.Web.Script.Serialization.JavaScriptSerializer ser = new System.Web.Script.Serialization.JavaScriptSerializer();

    Dictionary<string, string> outPut = new Dictionary<string, string>();
    var strReturn = ser.Serialize(qString);
    var strReturn2 = ser.Deserialize<Dictionary<string, string>>(strReturn);

    if (strReturn2["qString"] != "")
    {
        outPut.Add("query", "correct");

        return ser.Serialize(outPut);
    }
    else
    {
        outPut.Add("query", "incorrect");

        return ser.Serialize(outPut);
    }
}

APP_Start:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        var cors = new EnableCorsAttribute("*", "*", "*");

        config.EnableCors(cors);
        config.MapHttpAttributeRoutes();
        config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
        config.Formatters.Remove(config.Formatters.XmlFormatter);
        config.Formatters.JsonFormatter.MediaTypeMappings.Add(new RequestHeaderMapping("Accept", "text/html", StringComparison.InvariantCultureIgnoreCase, true, "application/json"));

        config.Routes.MapHttpRoute(
            name: "ActionApi",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
       );

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

HTML页:

<body>
<div style="text-align:center">
    <h2>AJAX JQuery JSON test</h2>
    Please enter Value1 :   <input type="number" id="txtValue1" min="1" max="100"><br><br>
    Please enter Value2 :   <input type="number" id="txtValue2" min="1" max="100"><br /><br>
    Result from Math API Service : <input type="text" id="txtResult" disabled /><br /><br>
    <input type="button" value="POST" id="btnPost">
</div>

按下 POST 按钮时出现的错误是:

POST http://localhost:53157/Web/api/FEB/testJSON/ 404 (Not Found)

Uncaught SyntaxError: Unexpected token <

那么我还缺少什么,因为它似乎甚至没有找到该功能?

添加 DTO class 并使用:

 public class Dto
    {
        public List<string> qString { get; set; } 
    }

和控制器:

[HttpPost]
public Dictionary<string, string> testJSON(Dto dto)
{
    var outPut = new Dictionary<string, string>();

    foreach (string query in dto.qString)
    {
        string status = query != string.Empty ? "correct" : "incorrect";

        outPut.Add(query, status);
    }

    return outPut;
}

现在您可以更改此代码:

 data: JSON.stringify({ qString: [sqlQ] }),
       success: function (result) {
              var obj = jQuery.parseJSON(data);
              console.log(obj);
       },

至:

 data: JSON.stringify({ qString: [sqlQ] }),
       success: function (result) {
              console.log(result);
       },