C# 角度-向Owin+;发出带有参数的HTTP GET请求;找不到Web API控制器
我正在尝试向我的Web API控制器发出URI中带有ID的HTTP GET请求,但我似乎无法将其发送到正确的函数,也无法成功地获取ID: 角度控制器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
$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”})?我也这么想…:)