C# 角度-向Owin+;发出带有参数的HTTP GET请求;找不到Web API控制器

C# 角度-向Owin+;发出带有参数的HTTP GET请求;找不到Web API控制器,c#,angularjs,http,asp.net-web-api,owin,C#,Angularjs,Http,Asp.net Web Api,Owin,我正在尝试向我的Web API控制器发出URI中带有ID的HTTP GET请求,但我似乎无法将其发送到正确的函数,也无法成功地获取ID: 角度控制器 $http({ method: 'GET', url: 'api/Files/Id/' + blobId, responsetype: 'arraybuffer' }).then(function successcallback(response) { console.l

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

角度控制器

  $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)
   {
   }
}
[RoutePrefix(“api/文件”)]
公共类文件控制器:ApiController
{
///api/Files/
[授权]
[路线(“”)
公共IHttpActionResult GetAll()
{
}
///api/Files/Id/
[授权]
[路线(“Id”)]
公共异步任务获取([FromUri]字符串id)
{
}
}
请求返回时未找到。URL应该是:

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

url:“../api/Controller/File/”

我应该用另一种方式传递ID吗?

你写的

...
[RoutePrefix("api/Files")]
public class FileController : ApiController
...
但在角度代码中,您使用的是/api/Controller/File/

你还需要写:

...
[Route("{Id}")]
public async Task<HttpResponseMessage> Get([FromUri] string id)
...
。。。
[路由(“{Id}”)]
公共异步任务获取([FromUri]字符串id)
...
您不需要键入
controller
您的控制器就是
FileController
,您为它定义了路由
“api/Files”

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

...
[RoutePrefix("api/Files")]
public class FileController : ApiController
...
但在角度代码中,您使用的是/api/Controller/File/

你还需要写:

...
[Route("{Id}")]
public async Task<HttpResponseMessage> Get([FromUri] string id)
...
。。。
[路由(“{Id}”)]
公共异步任务获取([FromUri]字符串id)
...
您不需要键入
controller
您的控制器就是
FileController
,您为它定义了路由
“api/Files”


因此,您可能必须编写
../api/api/Files/
,但我对此不确定。您必须测试它

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

[RoutePrefix("api/Files")]
这是控制器的路径。请尝试以下操作:

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

        console.log(response);
        //logic

    }, function errorcallback(response) {

    });

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

[RoutePrefix("api/Files")]
这是控制器的路径。请尝试以下操作:

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

        console.log(response);
        //logic

    }, function errorcallback(response) {

    });

我想我有一个输入错误,我在我的代码中输入了控制器,但我没有找到正确的路由。您是否在$http调用中从url中删除了/Id?尝试:“../api/Files/”+blobId,控制器代码当前在OP中,但仍然没有找到我想我有一个输入错误,当我在代码中输入控制器时,我确实有正确的路由。您是否在$http调用中从url中删除了/Id?尝试:'../api/Files/'+blobId,控制器代码当前在OP中,但仍然找不到。我在帖子中输入了错误。我更正了当前尝试从http getI调用控制器方法的方式。我删除了../根据我在OP中的当前代码,它仍然可以正常工作,我不知道我为什么要使用../首先。啊,我以为你只是不想显示你的基本url并键入。。。取而代之的是:DSo只是在路线周围添加{}是你的建议吗?({“id”})?我也这么想…:)我在我的帖子中有一个输入错误,我纠正了我目前试图从http getI调用控制器方法的方式。我删除了../用我在OP中的当前代码,它仍然可以正常工作,我不知道我为什么要使用../首先。啊,我想你只是不想显示你的基本url并键入。。。取而代之的是:DSo只是在路线周围添加{}是你的建议吗?({“id”})?我也这么想…:)