我是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 "";
}
}
答案 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()
}
的原因