Angular - 向 Owin+Web API 控制器发出带参数的 HTTP GET 请求

Angular - Making a HTTP GET request with parameter to Owin+Web API controller not found

我正在尝试向我的 Web API 控制器发出带有 URI 中 ID 的 HTTP GET 请求,但我似乎无法将其用于正确的功能,也无法成功获取 ID:

angular 控制器

  $http({
        method: 'GET',
        url: 'api/Files/Id/' + blobId,
        responsetype: 'arraybuffer'
    }).then(function successcallback(response) {

        console.log(response);
        //logic

    }, function errorcallback(response) {

    });

Startup.cs

 config.MapHttpAttributeRoutes();
 config.Routes.MapHttpRoute("DefaultAPI",
      "api/{controller}/{id}",
      new { id = RouteParameter.Optional });

Web API 控制器

 [RoutePrefix("api/Files")]
 public class FileController : ApiController
 {
   //   /api/Files/
   [Authorize]
   [Route("")]
   public IHttpActionResult GetAll()
   {

   }

   //   /api/Files/Id/
   [Authorize]
   [Route("Id")]
   public async Task<HttpResponseMessage> Get([FromUri] string id)
   {
   }
}

请求正在返回未找到。 URL 应该是:

url: '../api/Controller/File/' + blobId

url:'../api/Controller/File/'

我应该以不同的方式传递 ID 吗?

你写了

...
[RoutePrefix("api/Files")]
public class FileController : ApiController
...

但是在您的 Angular 代码中您使用的是 /api/Controller/File/

还需要写:

...
[Route("{Id}")]
public async Task<HttpResponseMessage> Get([FromUri] string id)
...

而且您不需要输入 controller 您的控制器是 FileController 并且您为它定义了路线 "api/Files"

因此您可能必须写 .../api/api/Files/ 但我不确定。你得测试一下

您在 $http 服务中使用的 url 是错误的。在您的网络 api 控制器中,您使用以下注释定义路由:

[RoutePrefix("api/Files")]

这是您的控制器的路由。尝试以下操作:

$http({
        method: 'GET',
        url: '../api/Files/' + blobId,
        responsetype: 'arraybuffer'
    }).then(function successcallback(response) {

        console.log(response);
        //logic

    }, function errorcallback(response) {

    });