小编Tec*_*ard的帖子

ajax post works vs. angularjs $ http无法使用ASP.NET MVC 4

我有两个项目客户端和服务器端.客户端项目是纯htmljs.服务器端是ASP.NET MVC 4和Web Api.因为我需要两个项目来启用CROS功能.我添加到服务器的webconfig中:

<system.webServer>
 <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Content-Type" />
      </customHeaders>
    </httpProtocol>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

正在运行的Ajax Post版本:

$.post(url, appContext).done(
                function(data, textStatus, jqXHR) {
                    successFn(data, textStatus);
                })
                .fail(
                    function(jqXHR, textStatus, err) {
                        errorFn(err, textStatus);
                    });
Run Code Online (Sandbox Code Playgroud)

angular $ http发布版本不起作用:

 $http({
                url: url,
                method: 'POST',
                params: { appContext: appContext },
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded'
                    /*'Accept': 'text/json'*/}
            }).success(successFn).error(errorFn);
Run Code Online (Sandbox Code Playgroud)

当我使用$ http时,我收到两个错误:

  1. 选项url 405(方法不允许)
  2. POST url 500(内部服务器错误)

ASP.NET MVC方法是

[System.Web.Http.HttpPost]
public List<Module> GetModules([FromBody]SessionContext appContext)
{
 return  CreateModules();
}
Run Code Online (Sandbox Code Playgroud)

编辑:

角度模型的配置:

var …
Run Code Online (Sandbox Code Playgroud)

asp.net-ajax asp.net-mvc-4 angularjs

4
推荐指数
1
解决办法
1万
查看次数

JSON.NET MVC 4 WebApi

我正在创建Controller以返回JSON格式的对象.我想使用Newtonsoft.Json库.我创建了两种方法:

[HttpGet]
[ActionName("RetrieveTestClassJson")]
public ActionResult RetrieveTestClassJson(int id)
{
    TestThing testThing = new TestThing() { Name = "LPL.22.334", Type = TypeTest.Component };
    JsonNetResult jsonNetResult = new JsonNetResult();
    jsonNetResult.Formatting = Formatting.Indented;
    jsonNetResult.ContentType = "application/json";
    jsonNetResult.ContentEncoding = Encoding.Unicode;
    jsonNetResult.Data = testThing;
    return jsonNetResult;
}

[HttpGet]
[ActionName("RetrieveTestClassCase2")]
public TestThing RetrieveTestClassCase2(int id)
{
    TestThing testThing = new TestThing() { Name = "LPL.22.334", Type = TypeTest.Component };
    return testThing;
}
Run Code Online (Sandbox Code Playgroud)

当我从ajax或浏览器url调用RetrieveTestClassJson时,我得到:

{"ContentEncoding":{"isThrowException":false,"bigEndian":false,"byteOrderMark":true,"m_codePage":1200,"dataItem":null,"encoderFallback":{"strDefault":"?","bIsMicrosoftBestFitFallback":false},"decoderFallback":{"strDefault":"?","bIsMicrosoftBestFitFallback":false},"m_isReadOnly":true},"ContentType":"application/json","Data":{"Name":"LPL.22.334"},"SerializerSettings":{"ReferenceLoopHandling":0,"MissingMemberHandling":0,"ObjectCreationHandling":0,"NullValueHandling":0,"DefaultValueHandling":0,"Converters":[{"CamelCaseText":true,"CanRead":true,"CanWrite":true}],"PreserveReferencesHandling":0,"TypeNameHandling":0,"TypeNameAssemblyFormat":0,"ConstructorHandling":0,"ContractResolver":null,"ReferenceResolver":null,"TraceWriter":null,"Binder":null,"Error":null,"Context":{"m_additionalContext":null,"m_state":0},"DateFormatString":"yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK","MaxDepth":null,"Formatting":0,"DateFormatHandling":0,"DateTimeZoneHandling":3,"DateParseHandling":1,"FloatFormatHandling":0,"FloatParseHandling":0,"StringEscapeHandling":0,"Culture":"(Default)","CheckAdditionalContent":false},"Formatting":1}
Run Code Online (Sandbox Code Playgroud)

当我调用RetrieveTestClassCase2时,我得到了正常的JSON格式.我现在删除了xml处理程序以进行测试:

var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
Run Code Online (Sandbox Code Playgroud)

我对这是怎么回事感到困惑.

c# json json.net asp.net-mvc-4

1
推荐指数
1
解决办法
1万
查看次数

标签 统计

asp.net-mvc-4 ×2

angularjs ×1

asp.net-ajax ×1

c# ×1

json ×1

json.net ×1