从Angular 2应用程序发布POST时c# – 405(方法不允许)
发布时间:2020-12-17 17:43:07 所属栏目:安全 来源:网络整理
导读:我对这个问题有点绝望.我是angular 2和.net的新手,我试图构建一个简单的应用程序.我用c#编写了api休息.当我从角度调用GET方法时,它工作正常,但不是POST方法.我一直收到405(方法不允许),但是如果我用邮递员打电话的话都可以.我看到同样问题的很多问题,但它们
我对这个问题有点绝望.我是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'); }}
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,ninterno,tipo) != 0) { return Request.CreateResponse(HttpStatusCode.OK); } else { return Request.CreateResponse(HttpStatusCode.BadRequest); } } }}
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 } ); } } }
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'."}" 任何的想法?谢谢你的阅读! 编辑:这是邮差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==?= 解决方法
您的代码似乎没问题.尝试更改代码,如下所示:
角 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'); }} 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: "*",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; ... } }} 我遇到了同样的问题.你发送的数据的实际数据类型无法在API端获得.这就是它给出405错误的原因.所以尝试将数据作为对象发送,并作为API端的对象接收. 希望对你有帮助 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |