Skip to main content
 首页 » 编程设计

C# Web api post 参数始终为空

2024年02月05日27tintown

我正在使用 token 在 C# 中做一个 Web API,但我需要接收 postman 的参数到我的方法

 [HttpPost, Route("api/cobro/saveEmail")] 
    public IHttpActionResult SaveEmailForDiscount([FromBody] string email) 
    { 
        //do something with e-mail 
        return Ok(email); 
    } 

但电子邮件始终为空

这是 PostMan 请求

POST /api/cobro/saveEmail HTTP/1.1 
Host: localhost:53107 
Content-Type: application/x-www-form-urlencoded 
Cache-Control: no-cache 
Postman-Token: 881045b2-0f08-56ac-d345-ffe2f8f87f5e 
 
email=jose%40gm.com 

这是我的启动类,里面有所有的配置

    using System; 
using Microsoft.Owin; 
using Owin; 
using Microsoft.Owin.Security.OAuth; 
using System.Web.Http; 
using System.Net.Http.Headers; 
 
[assembly: OwinStartup(typeof(Cobros_BackEnd.Startup))] 
 
namespace Cobros_BackEnd 
{ 
    public class Startup 
    { 
        public void Configuration(IAppBuilder app) 
        { 
 
 
     app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); 
 
        var MyProvider = new AuthorizationServerProvider(); 
        OAuthAuthorizationServerOptions options = new OAuthAuthorizationServerOptions 
        { 
 
            AllowInsecureHttp = true, 
            TokenEndpointPath = new PathString("/token"), 
            AccessTokenExpireTimeSpan = TimeSpan.FromDays(1), 
            Provider = MyProvider 
        }; 
        app.UseOAuthAuthorizationServer(options); 
        app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()); 
 
        HttpConfiguration config = new HttpConfiguration(); 
        config.Formatters.JsonFormatter.SupportedMediaTypes 
        .Add(new MediaTypeHeaderValue("text/xml")); 
 
        //get all users 
        config.Routes.MapHttpRoute( 
            name: "Users", 
            routeTemplate: "api/{controller}/users", 
            defaults: new { id = RouteParameter.Optional } 
            ); 
 
 
 
        WebApiConfig.Register(config); 
    } 
  } 
} 

我在 GET 中使用其他方法并且一切正常,但我需要在 POST 中使用它

请您参考如下方法:

您可以像这样创建一个类包装器电子邮件字段

public class SaveEmailModel{ 
    public string Email{get;set;} 
} 
 
public IHttpActionResult SaveEmailForDiscount([FromBody] SaveEmailModel model){ 
... 
}