无法将对象从Angle Service发布到Web Api

时间:2019-02-02 13:14:40

标签: angular asp.net-core-webapi

我是angular的新手,我已经在Visual Studio 2017中使用angular 6和asp .net core 2.0进行了应用。 我无法将对象从angular Service发布到Web API。当我使用Ajax调用从HTML页面调用Web API时,Web API工作正常,但是无法正常工作 当角度服务要求发布时。 我已经使用了所有可能的解决方案,例如更改HTTP标头,在Web api参数中应用[FromBody]等

以下是PostRequest的代码

createProduct(product): Observable<ProductModel> {
    const httpHeaders = this.httpUtils.getHTTPHeaders();  ///Format is     result.set('Content-Type', 'application/json')
     return this.http.post<ProductModel>('http://localhost:25875/api/Product/Index' , product, { headers: httpHeaders });
}

这是我的控制器代码

 [Route("api/Product")]
public class ProductController : Controller
{

   [HttpPost]
    public string Index([FromBody]ProductModel Product)
    {

        Debug.WriteLine("Called Index");
        return "";
    }
} 

This is the link to Error that i am getting in my Console.

1 个答案:

答案 0 :(得分:0)

您正在使用具有默认[Route("api/[controller]")] public class ProductController : Controller { //POST api/product/index [HttpPost("[action]")] public string Index([FromBody]ProductModel Product) { Debug.WriteLine("Called Index"); return ""; } } 属性的属性路由,但在请求URL中调用了操作名称。

您需要更新操作以匹配所需的URL

HttpPost

在没有路由模板的情况下使用[HttpPost("")] 与调用

相同
[HttpPost]
[Route("")]

POST api/product

,它将不带操作名称路由到404 Not Found。这就是为什么您在请求POST api/product/index

时得到private static let livePhotoUrlString = "https://m1.kappboom.com/livewallpapers/info?o=0&v=575" static func getLivePhotos(completionHandler: @escaping (([LivePhoto]) -> Void)) { guard let livePhotoUrl = URL(string: livePhotoUrlString) else { return } let semaphore = DispatchSemaphore(value: 0) URLSession.shared.dataTask(with: livePhotoUrl) { (data, response, error) in do { guard let data = data else { return } let livePhotos = try JSONDecoder().decode([LivePhoto].self, from: data) completionHandler(livePhotos) } catch { completionHandler([]) } semaphore.signal() }.resume() semaphore.wait() } 的原因

引用Routing to controller actions in ASP.NET Core