2017-03-17 56 views
1

我做的在C#与令牌的网络API,但我需要接受邮递员的参数,以我的方法C#的Web API之后的参数总是空

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

但总是电子邮件是空

这是邮递员要求

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

回答

2

,你可以创建一个这样

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

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

这是解决这个问题的最简单的方法IMO – victor

2

试试这个: =何塞%40gm.com

网络API对于在帖子正文中传递的简单类型不起作用。你需要实际实现一个自定义数据绑定器才能做到这一点。我刚才说的是解决方法。我避免在Web API中以任何代价发布简单类型。编号倾向于创建一个模型对象,然后发送数据在JSON中映射到我的模型。你也可以使用[FromUri]并在url中传递你的字符串。

+0

你能举一个例子或引用的类包装电子邮件领域? – Heisenberg06

+0

http://stackoverflow.com/questions/19093603/simple-post-to-web-api – victor