gpt4 book ai didi

第二个 API 上的 ASP.Net Web API 404 错误

转载 作者:行者123 更新时间:2023-12-02 12:03:34 25 4
gpt4 key购买 nike

所以我已经设置了 1 个 Web API 并且运行良好,但现在我正在尝试设置自己的管理面板(我确实这样做了),我需要使用 DeleteUser()来自名为 AdminApi 的 Web API 的函数,但我似乎无法让它工作。在给出 API 应该所在的路径时,我不断收到 404 错误。

Web API 配置:

public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services

// Web API routes
config.MapHttpAttributeRoutes();

config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}

全局:

protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);

//Create the custom role and user
RoleActions roleActions = new RoleActions();
roleActions.AddUserAndRole();
}

管理API:

[Authorize(Roles = "admin")]
public class AdminApiController : ApiController
{
public string test()
{
return "test";
}

[HttpPost]
public string DeleteUser(string id)
{
ApplicationDbContext db = new ApplicationDbContext();
var user = db.Users.Find(id);
if (user != null)
{
string email = user.Email;
db.Users.Remove(user);
return "Succesfully deleted user : " + email;
}
else
return "Failed to delete user.";
}
}

Ajax :

function deleteUser (id)
{
$.ajax({
url: '../api/AdminApi/DeleteUser',
type: 'POST',
contentType: "application/json",
dataType: 'json',
data: JSON.stringify(id),
success: function (data) {
alert(data);
},
error: function (x, y, z) {
alert(x + '\n' + y + '\n' + z);
}
});
}

页面/Admin/AdminPage调用ajax函数所以要访问 Web api -> ../api/AdminApi删除用户的函数是DeleteUser-> ../api/AdminApi/DeleterUser

我不明白为什么会收到 404 错误。我可以理解我的函数 DeleteUser 是否不起作用,因为我还没有测试过它,但如果我无法进入该函数,我就无法测试它。

最佳答案

该问题与您如何使用该属性有关:

[Route("DeleteUser")]

如果您使用属性路由。在方法级别,它的作用是定义新路由或更多路由,因此您应该使用它的方式类似于 [Route('Url/path1/route1')]:

作为其工作原理的示例:

//GET api/customer/GetMetaData
[Route('/api/customer/GetMetaData')]
public string Get2(){
//your code goes here
}

如果您要在类中声明多个路由,那么您可以在类级别使用 RoutePrefix 属性,例如 [RoutePrefix('url')] 。这将为您在 Controller 类中的所有方法设置一个新的基本 URL。

例如:

[RoutePrefix("api2/some")]
public class SomeController : ApiController
{
// GET api2/some
[Route("")]
public IEnumerable<Some> Get() { ... }

// POST api2/some/DeleteUser/5
[HttpPost]
[Route("DeleteUser/{id:int}")]
public Some DeleteUser(int id) { ... }

}

更新

默认情况下,Web API 首先查看路由 URL,即您的 [Route] 中的内容,我的意思是,它会尝试将其与您的帖子进行匹配。但是,如果您的方法有一个复杂对象作为参数,WebApi 无法从请求 URI 获取值,因为该参数是复杂类型 Web API 使用媒体类型格式化程序从请求正文中读取值。

由于您的string id不是一个复杂的对象,并且它是您的Route的一部分,因此WebApi期望它作为您的URL而不是正文的一部分。试试这个:

[HttpPost]
public string DeleteUser([FromBody]string anotherName)

关于第二个 API 上的 ASP.Net Web API 404 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36273263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com