.Net WebApi 2.2에서 bitbucket의 게시물을 수락하려고합니다. 그러나 BB는 데이터를 본문으로 게시하지 않고 게시 매개 변수로 게시합니다. 이 http://www.posttestserver.com/data/2014/11/05/shea/22.05.091712543622Bitbucket POST 후크 .Net ApiController 설정?
현재 우편 배달부 수집 가져올 수 있습니다 : 여기 우체부를 사용하여 보내는의 bitbucket 시뮬레이션 한
내 ApiController에 게시 할 때 https://www.getpostman.com/collections/ec562c5141d85fe7b850
를, 내가 얻을
{
"Message": "The requested resource does not support http method 'POST'."
}
게시물 기능 서명이 다음과 같이 표시 될 때 발생합니다.
public string Post([FromUri]string payload)
{
var hookEvent = JsonConvert.DeserializeObject<HookEvent>(payload);
....
또는 public string Post (문자열 페이로드) { var hookEvent = JsonConvert.DeserializeObject (payload); ....
내가 할 경우 :
public string Post([FromUri]HookEvent payload)
{
....
페이로드가 null는 아니고, 그러나 모든 필드가 null입니다.
public string Post(HookEvent payload)
{
이 오류가 있습니다 : 나는 변화의 우편 배달부 요청 본문으로 페이로드를 전송하는 경우 때문에 내 'HookEvent이'제대로 역 직렬화 알고
"Message": "The request contains an entity body but no Content-Type header. The inferred media type 'application/octet-stream' is not supported for this resource.",
"ExceptionMessage": "No MediaTypeFormatter is available to read an object of type 'HookEvent' from content with media type 'application/octet-stream'.",
"ExceptionType": "System.Net.Http.UnsupportedMediaTypeException",
"StackTrace": " at System.Net.Http.HttpContentExtensions.ReadAsAsync[T](HttpContent content, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)\r\n at System.Net.Http.HttpContentExtensions.ReadAsAsync(HttpContent content, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)\r\n at System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync(HttpRequestMessage request, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)"
를, 개체가 올바르게 모든 필드와, 역 직렬화 세트. 불행히도 BB는 그런 식으로 페이로드를 보내지 않고 게시 된 매개 변수로 보냅니다.
내 컨트롤러 서명은 다음과 같습니다
public class BitbucketHookController : ApiController
{
....
다른 라우팅 비트 :
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
}
}
그리고 위해 Application_Start() Global.asax.cs에서 내가해야 할 일을
DiConfig.Register();
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
컨트롤러가 게시물 페이로드를 받아들이게하려면 어떻게해야합니까?
사상 1은 메소드 게시물을 반환하지 않는 첫 번째 메소드에서'[HttpPost]'속성으로 꾸밀 수 있습니까? 게시물을 집어 올리도록 강요 할 수 없습니다. – Prescott
생각 2는 모델에 null 값이있는 메서드에서 - 전달되는 요청을 검사하여 전달되는 내용과 방법을 확인할 수 있습니다. 'var req = Request.Content.ReadAsByteArrayAsync()'와 같은 원시 요청에 접근 할 수있다. – Prescott
생각하기 1 : 장식을 추가해도 결과가 바뀌지 않는다. 나는 여전히 요청한 리소스가 http 메소드를 지원하지 않는다. 'POST '. – sheamus