[WebAPI] ajax请求webapi不知道为什么总是不成功,请高手指教指教。

it3nod 2020-07-15 03:10:38
后端API代码:

public class TestController : BaseController
{
[HttpPost]
public HttpResponseMessage testPost([FromBody]TokenModel token)
{
try
{

return Success().toHttpResponseJson();
}
catch (Exception err)
{
return Failure(err.Message).toHttpResponseJson();
}
}
}

public class TokenModel
{
public string access_token { get; set; }
public long createtime { get; set; }
public int expires_in { get; set; }
}


前端Html代码:

function doRequest() {
var jData = "{\"access_token\":\"aaaaaaa\",\"createtime\":112121212,\"expires_in\":7200}";

$.ajax({
url: 'http://localhost:37424/api/test/testPost',
type: 'POST',
data: JSON.parse(jData), //这里直接用jData也不行
contentType: "application/json",
dataType: "json",
success: function (returndata) {
alert(1);
},
error: function (returndata) {
alert(2);
}
});
}


主要是返回:远程服务器返回错误: (500) 内部服务器错误。
...全文
4864 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
醉★红颜 2020-07-17
  • 打赏
  • 举报
回复 1
建议先用postman测试一下。
正怒月神 版主 2020-07-16
  • 打赏
  • 举报
回复
主要是返回:远程服务器返回错误: (500) 内部服务器错误 这说明,接口已经访问到了。 那么就是接口内部处理时,异常了! 首先,看看有没有过滤器,拦截器之类的生效。 然后,你看一下 BaseController 里边哪些初始化的东西,加个断点。 最后,看看代码的catch块(但是这一块可能性很小。因为已经捕获了。所以我猜测可能是basecontroller的问题。
  • 打赏
  • 举报
回复
1.web.config 需要配置跨域

   <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS " />
        <add name="Access-Control-Allow-Headers" value="x-requested-with,content-type" />
        <add name="Access-Control-Allow-Origin" value="*" />
      </customHeaders>
    </httpProtocol>
2.前端ajax

    $("#save").click(function(){ 
		jQuery.support.cors = true;
		var jdata = {"access_token":"1231","createtime":"123","expires_in":"123"};
		$.ajax({
			url: 'http://192.168.1.81:8492/api/values/testPost',
			type: "POST",
			// contentType:"application/json; charset=urf-8",   指定的是类型json串,不是 json 对象
			dataType:'json',    
			data:  jdata,
			crossDomain: true,
			success: function (returndata) {
				alert(JSON.stringify(returndata));
			},
			error: function (returndata) {
				alert(2);
			}
		});
    });
3.后端C#代码
   
  [HttpPost, HttpOptions]
        [ActionName("testPost")]
        public ApiResult testPost([FromBody] TokenModel  tokenModel)
        {
            try
            {
                return new ApiResult
                {
                    IsError = false,
                    Msg = "获取成功",
                    PageCount = 1,
                    Result = tokenModel
                };
            }
            catch (Exception err)
            {
                return new ApiResult
                {
                    IsError = true,
                    Msg = "失败",
                    PageCount = 1,
                    Result = "testPost"
                };
            }
        }
4.打印结果
szjarvis 2020-07-15
  • 打赏
  • 举报
回复
postman是一个调试工具,报的错误比较详细。用最简单的controller试一下

public class TestController : ApiController
{
        [HttpPost]
        public string testPost([FromBody]TokenModel token)
        {
            try
            {
 
                return "OK";
            }
            catch (Exception err)
            {
                return "error";
            }
        }
}
如果以上代码可以输入出OK,那说明你的BaseController有问题,建议用调试工具,错误还是比较清淅的。
it3nod 2020-07-15
  • 打赏
  • 举报
回复
不懂什么是POSTMAN,参数[FromBody]TokenModel token如果改成[FromUri] string str这样是可以通的,感觉是参数传递方式两边不一致。
jhdxhj 2020-07-15
  • 打赏
  • 举报
回复
这个接口,你用POSTMAN可以测试通不?

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧