繁体   English   中英

C#Web API发布参数始终为null

[英]C# Web api post parameter always null

我正在使用带有令牌的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

这是我的Startup类,所有配置

    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上使用它

在您的请求正文中尝试:= jose%40gm.com

在帖子正文中传递简单类型时,Web Api不能很好地发挥作用。 您实际上需要实现一个自定义数据绑定器才能执行此操作。 我刚才说的是解决方法。 我避免不惜一切代价在Web api中在主体中发布简单类型。 我更喜欢制作一个Model对象,然后以JSON发送数据,该数据将映射到我的模型。 您也可以使用[FromUri]并将字符串传递到url中。

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

public class SaveEmailModel{
    public string Email{get;set;}
}

public IHttpActionResult SaveEmailForDiscount([FromBody] SaveEmailModel model){
...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM