CORS:对预检请求的响应没有通过访问控制检查:No' Access-Control-Allow-Origin'标头出现在请求的资源上

时间:2016-09-22 18:47:54

标签: asp.net angularjs asp.net-web-api

我有以下代码与AngularJS和Web Api,生成请求错误请求生成,请帮助

<body ng-app="ProductAdd">
    <script>
        angular.module('ProductA**strong text**dd', [])
        .controller('ProductAddController', ['$scope', '$http', function ($scope, $http) {
            $scope.submit = function () {
                if ($scope.Name) {
                    var product = {
                        "Name": $scope.Name,
                        "Category": $scope.Type,
                        "Price": $scope.Price
                    }
                    $http.post('http://localhost:1110/api/product', product).
                    success(function (data, status, headers, config) {
                        alert('Product Added Successfully');
                    }).
                    error(function (data, status, headers, config) {
                        alert("erro");
                    });
                }
            };
        }]);
    </script>
    <h2>Add New Product</h2>
    <form ng-submit="submit()" ng-controller="ProductAddController">
        <div>Name:<input type="text" ng-model="Name" required></div></br>
        <div>Type:<input type="text" ng-model="Type" required> </div> </br>
        <div>Price:<input type="text" ng-model="Price"> </div> </br>
        <div> <input type="submit" id="productsubmit" value="Submit" /></div> </br>
    </form>
</body>

服务器端代码:

using Product_API.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web;
using System.Web.Http;
using System.Web.Http.Cors;

namespace Product_API.Controllers
{
    [EnableCors(origins: "*", headers: "*", methods: "*")]
    public class ProductController : ApiController
    {

        public static Lazy<List<Product>> products = new Lazy<List<Product>>();//Static variable use only for demo, don’t use unless until require in project. 
        public static int PgaeLoadFlag = 1; // Page load count. 
        public static int ProductID = 4;
        public ProductController()
        {
            if (PgaeLoadFlag == 1) //use this only for first time page load
            {
                //Three product added to display the data
                products.Value.Add(new Product { ID = 1, Name = "bus", Category = "Toy", Price = 200.12M });
                products.Value.Add(new Product { ID = 2, Name = "Car", Category = "Toy", Price = 300 });
                products.Value.Add(new Product { ID = 3, Name = "robot", Category = "Toy", Price = 3000 });
                PgaeLoadFlag++;
            }
        }

        // GET api/product`enter code here`
        public List<Product> GetAllProducts() //get method
        {
            //Instedd of static variable you can use database resource to get the data and return to API
            return products.Value; //return all the product list data
        }

        // GET api/product/5
        public IHttpActionResult GetProduct(int id)
        {
            Product product = products.Value.FirstOrDefault((p) => p.ID == id);
            if (product == null)
            {
                return NotFound();
            }
            return Ok(product);
        }

       // POST api/product
        public void ProductAdd(Product product) //post method
        {
            product.ID = ProductID;
            products.Value.Add(product); //add the post product data to the product list
            ProductID++;
            //instead of adding product data to the static product list you can save data to the database.
        }


    }
}

已在服务器端启用Cors但在控制台上出现以下错误:

  

无法加载资源:服务器响应状态为405(方法不允许)

     

ProductAdd.html:1 XMLHttpRequest无法加载

     

对预检请求的响应没有通过访问控制检查:否&#39;访问控制 - 允许 - 来源&#39;标头出现在请求的资源上。因此不允许原点访问。响应的HTTP状态代码为405。

任何帮助将不胜感激

0 个答案:

没有答案
相关问题