ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript-使用ASP.Net webapi的Angular.js $resource?

2019-10-14 01:36:32  阅读:224  来源: 互联网

标签:javascript angularjs asp-net asp-net-web-api c-2


我有一个简单的ASP.Net WebAPI服务,该服务在POST / PUT上分配一个静态变量,并在GET上返回值:

private static State Repo = null;

public State Get()
{
    return Repo;
}

public void Post(State value)
{
    Repo = value;
}

public void Put(State value)
{
    Repo = value;
}

我有一个这样定义的角度资源:

var stateService = angular.module('StateService', ['ngResource']);

stateService.factory('State', function ($resource) {
    return $resource('http://localhost:8080/API/State');
});

当我尝试这样做时:

State.get(function (state) {
    $scope.data = state.data !== undefined ? state.data : '[Not Set]';

    state.data = "newvalue";
    state.$save();
});

get()工作正常,但$save()在chrome中抛出此错误:

XMLHttpRequest cannot load http://localhost:8080/API/State. Invalid HTTP status code 405 

该webAPI已经启用了CORS(返回Access-Control-Allow-Origin:*).我想念什么?

解决方法:

对于某些CORS请求,浏览器在发送对资源的实际请求之前会发送一个附加请求,称为“预检请求”.

飞行前请求使用HTTP OPTIONS(405状态码)方法.它包含两个特殊的头:

> Access-Control-Request-Method:将用于的HTTP方法
实际要求.
> Access-Control-Request-Header:请求列表
应用程序在实际请求上设置的标头. (再次
不包含浏览器设置的标头.)

即使您启用了CORS,它也适用于GET请求,并且您告诉它对于POST请求显示405 HTTP状态.这是因为POST,PUT,DELETE请求不是安全的请求,它们首先发送请求OPTIONS请求,您必须响应该请求,例如Access-Control-Allow-Origin:*,Access-Control-Allow-Methods :POST,然后它将再次发送POST request,然后它将正常工作.

请确认您要发送的标题是什么.即,要成功发送CORS POST请求,您至少必须发送Access-Control-Allow-Methods:POST以及Access-Control-Allow-Origin:*.

使它启用CORS的步骤:

>安装此-使用NuGet安装软件包Microsoft.AspNet.WebApi.Cors
>打开文件App_Start / WebApiConfig.cs.将以下代码添加到WebApiConfig.Register方法.
>接下来,将[EnableCors]属性添加到Controller类:

具有以下参数

[EnableCors(来源:“您的域”,标头:“ *”,方法:“ POST”)]
>重新部署您的WebAPI项目.

消息来源-http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api

更多链接-http://www.codeproject.com/Articles/742532/Using-Web-API-Individual-User-Account-plus-CORS-En

标签:javascript,angularjs,asp-net,asp-net-web-api,c-2
来源: https://codeday.me/bug/20191014/1911907.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有