Aw3*_*ame 5 c# api rest post angular
我对这个问题有点绝望.我是angular 2和.net的新手,我试图构建一个简单的应用程序.我用c#编写了api休息.当我从角度调用GET方法时,它工作正常,但不是POST方法.我一直收到405(方法不允许),但是如果我用邮递员打电话的话都可以.我看到同样问题的很多问题,但它们对我不起作用.我启用了CORS.这是我的代码:
角
sendPtipo(delegacion,municipio,ejercicio,recinto,tipo){
let headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded' });
let options = new RequestOptions({ headers: headers });
let urlPtipo ='http://localhost:50790/ApiProductoTipo/CalculaPTRecinto';
let body ='delegacion='+delegacion+'&municipio='+municipio+'&recinto='+recinto+'&ejercicio='+ejercicio+'&tipo'+tipo;
return this._http.post(urlPtipo , body , options)
.map(data => {alert('ok');})
.catch(this.handleError);
}
private extractData(res: Response) {
let body = res.json();
return body.data || {};
}
private handleError(error: Response) {
console.error(error);
return Observable.throw(error.json().error || 'Server error');
}}
Run Code Online (Sandbox Code Playgroud)
在C#休息
using System.Collections.Generic;
using System.Web.Http;
using AppName.Models;
using AppName.Service;
using System.Linq;
using AppName.ViewModels;
using System.Net.Http;
using System.Net;
using System.Web.Http.Cors;
namespace Api.Services
{
// Allow CORS for all origins. (Caution!)
//[EnableCors(origins: "*", headers: "*", methods: "*")]
public class ApiProductoTipoController : ApiController
{
private readonly IProductoTipoService productoTipoService;
public HttpResponseMessage Options()
{
return new HttpResponseMessage { StatusCode = HttpStatusCode.OK };
}
public ApiProductoTipoController(IProductoTipoService productoTipoService)
{
this.productoTipoService = productoTipoService;
}
[HttpPost]
[Route("~/ApiProductoTipo/CalculaPTRecinto")]
public HttpResponseMessage CalculaPTRecinto([FromBody]int delegacion, int municipio, int ninterno, int ejercicio, string tipo)
{
if (this.productoTipoService.CalculaPTRecinto(delegacion, municipio, ninterno, ejercicio, tipo) != 0)
{
return Request.CreateResponse(HttpStatusCode.OK);
}
else
{
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
}
}}
Run Code Online (Sandbox Code Playgroud)
webapiconfig.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
using System.Web.Http.Cors;
namespace Web
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
//Enable cors
var cors = new EnableCorsAttribute("*", "accept,accesstoken,authorization,cache-control,pragma,content-type,origin", "GET,PUT,POST,DELETE,TRACE,HEAD,OPTIONS");
//var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
//Configuramos el MapRoute
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "ApiWithAction",
routeTemplate: "{controller}/{action}/{id}",
defaults: new { action = RouteParameter.Optional, id = RouteParameter.Optional }
);
}
}
}
Run Code Online (Sandbox Code Playgroud)
日志
headers:Headers
ok:false
status:405
statusText:"Method Not Allowed"
type:2
url:"http://localhost:50790/ApiProductoTipo/CalculaPTRecinto"
_body:"{"Message":"The requested resource does not support http method 'POST'."}"
Run Code Online (Sandbox Code Playgroud)
任何的想法?谢谢你的阅读!
编辑:这是邮差200 OK的回应
Cache-Control ?no-cache
Content-Length ?0
Date ?Fri, 26 May 2017 09:48:05 GMT
Expires ?-1
Pragma ?no-cache
Server ?Microsoft-IIS/10.0
X-AspNet-Version ?4.0.30319
X-Powered-By ?ASP.NET
X-SourceFiles ?=?UTF-8?B?QzpcVXNlcnNcNzAyNTU3MjFKXERlc2t0b3BcQXBpUHJvZHVjdG9UaXBvXFdlYlxBcGlQcm9kdWN0b1RpcG9cQ2FsY3VsYVBUUmVjaW50bw==?=
Run Code Online (Sandbox Code Playgroud)
您的代码似乎没问题.尝试更改代码,如下所示:
角
sendPtipo(delegacion: number,municipio: number,ejercicio: number,recinto: number,tipo: string){
let data = new Object();
data.delegacion = delegacion;
data.municipio = municipio;
data.ejercicio = ejercicio;
data.recinto = recinto;
data.tipo = tipo;
let headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded' });
let options = new RequestOptions({ headers: headers });
let urlPtipo ='http://localhost:50790/ApiProductoTipo/CalculaPTRecinto';
return this._http.post(urlPtipo , data , options)
.map(data => {alert('ok');})
.catch(this.handleError);
}
private extractData(res: Response) {
let body = res.json();
return body.data || {};
}
private handleError(error: Response) {
console.error(error);
return Observable.throw(error.json().error || 'Server error');
}}
Run Code Online (Sandbox Code Playgroud)
C#中的API
using System.Collections.Generic;
using System.Web.Http;
using AppName.Models;
using AppName.Service;
using System.Linq;
using AppName.ViewModels;
using System.Net.Http;
using System.Net;
using System.Web.Http.Cors;
namespace Api.Services
{
// Allow CORS for all origins. (Caution!)
//[EnableCors(origins: "*", headers: "*", methods: "*")]
public class ApiProductoTipoController : ApiController
{
public class myobj{
public int delegacion { get; set; }
public int municipio { get; set; }
public int ejercicio { get; set; }
public int recinto { get; set; }
public string tipo { get; set; }
}
private readonly IProductoTipoService productoTipoService;
public HttpResponseMessage Options()
{
return new HttpResponseMessage { StatusCode = HttpStatusCode.OK };
}
public ApiProductoTipoController(IProductoTipoService productoTipoService)
{
this.productoTipoService = productoTipoService;
}
[HttpPost]
[Route("~/ApiProductoTipo/CalculaPTRecinto")]
public HttpResponseMessage CalculaPTRecinto(myobj data)
{
var tipo = data.tipo;
...
}
}}
Run Code Online (Sandbox Code Playgroud)
我遇到了同样的问题.你发送的数据的实际数据类型无法在API端获得.这就是为什么它给予.So 405 error尝试将数据作为对象发送并且还作为API端的对象接收.
希望对你有帮助
| 归档时间: |
|
| 查看次数: |
9301 次 |
| 最近记录: |