Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将参数从AngularJS$http.post传递到ASP.NETWebAPI核心_Angularjs_Asp.net Web Api_Asp.net Core_Asp.net Web Api2_Angular Http - Fatal编程技术网

如何将参数从AngularJS$http.post传递到ASP.NETWebAPI核心

如何将参数从AngularJS$http.post传递到ASP.NETWebAPI核心,angularjs,asp.net-web-api,asp.net-core,asp.net-web-api2,angular-http,Angularjs,Asp.net Web Api,Asp.net Core,Asp.net Web Api2,Angular Http,我想从Angular网页调用ASP.NETWebAPI。 我编写了以下API: [HttpPost("Login")] public async Task<IActionResult> Login(string user) { return Json(new RequestResult { State = RequestState.Success, Msg = "Welcome" }); } 但我在API的“user”变量中得到了“Null”值

我想从Angular网页调用ASP.NETWebAPI。 我编写了以下API:

[HttpPost("Login")]
public async Task<IActionResult> Login(string user)
{
   return Json(new RequestResult
   {
     State = RequestState.Success,
     Msg = "Welcome"
   });
}
但我在API的“user”变量中得到了“Null”值。 请帮帮我

图:在API的参数中添加[FromBody]后显示错误。

实际上,您只需要传递一个参数并将数据返回到响应。因此,使用
GET
方法而不是
POST
方法的更好方法是通过
QueryString
传递参数


  • 但若你们只想使用POST方法,那个么你们可以按照下面的方式进行

    var body = JSON.stringify({ user: 'm2pathan'});
    $http.post('http://localhost:50087/api/tokenauth/login', body)
    .then(function loginSuccessCallback(response) {
    console.log("In loginSuccessCallback", response);
    }
    

除了@Ramesh answer,如果您需要从请求正文填充用户,您应该使用
[FromBody]
属性(请参阅):

[HttpPost("Login")]
public async Task<IActionResult> Login([FromBody] string user)
[HttpPost(“登录”)]
公共异步任务登录([FromBody]字符串用户)

您的代码中有几个问题:

首先将
内容类型设置为
application/json
,然后发送无效的json。使用
JSON.stringify({user:'m2pathan'}
构建有效的JSON

然后,在ASP.NET核心应用程序中,您需要在操作
登录
中使用复杂类型,而不是简单类型
字符串
。很可能您仍需要发送密码和其他参数,因此添加如下类:

public class LoginRequest
{
    public string User { get; set; }
}
然后将您的
登录操作更改为

[HttpPost("Login")]
public async Task<IActionResult> Login([FromBody]LoginRequest request)
{
    return Json(new RequestResult
    {
        State = RequestState.Success,
        Msg = "Welcome"
    });
}
[HttpPost(“登录”)]
公共异步任务登录([FromBody]登录请求)
{
返回Json(新的RequestResult
{
State=RequestState.Success,
Msg=“欢迎”
});
}

现在您应该没事了。

问题与CORS(跨来源资源共享)有关。 我在ConfigureServices()方法中的startup.cs中添加了策略,如下所示:

services.AddCors(options =>
{
    options.AddPolicy("CorsPolicy",
        builder => builder.AllowAnyOrigin()
        .AllowAnyMethod()
        .AllowAnyHeader()
        .AllowCredentials());
});
并将其添加到操作之前,如下所示:

[EnableCors("CorsPolicy")]
[Produces("application/json")]
[Route("api/[controller]")]
public class TokenAuthController : Controller
{
    //my action methods
}

因为您的内容类型是json,而您发送的数据不是json文件,所以我也尝试使用json格式作为
数据:{“user”:“m2pathan”}
在参数中添加
[FromBody]
后,出现错误“状态代码:415不支持的媒体类型”尝试使用分号而不是逗号来分隔内容类型string
application/json,charset=UTF-8
中的值。您是否也可以发布Chrome/Firefox开发工具的屏幕截图?查看服务器上和服务器上的确切标题?当然,请检查您似乎正在向跨源资源发送请求,这可能是t的根本原因这是一个问题。我不是这里的专家,所以我不确定我是否能帮你。我提出的方法是在本地环境中工作,客户端和api都位于同一个源上。在参数中添加
[FromBody]
后,我收到错误“状态代码:415不支持的媒体类型”
[EnableCors("CorsPolicy")]
[Produces("application/json")]
[Route("api/[controller]")]
public class TokenAuthController : Controller
{
    //my action methods
}