[英].NET CORE Web API Routing
I am new to .NET Core Web API and i'm trying to create Web API with 3 POST methods.
添加用戶 更新用戶 刪除用戶
我能夠使用 AddUser POST 方法創建一個 .NET 核心 web api 項目,並且工作正常,但我希望它是 uri 的方式
https://localhost:1234/api/Project/AddUser
https://localhost:1234/api/Project/UpdateUser
https://localhost:1234/api/Project/DeleteUser
當我在默認 swagger 中運行應用程序時,uri 顯示 POST /api/Project 即 https://localhost:1234/api/Project
我正在使用 .NET 核心 web api 5.0
這里的代碼來自我的 controller
namespace ProjectAPI.Controllers
{
[Route("api/[controller]")]
[ApiController]
[ApiKeyAuth]
public class ProjectController : ControllerBase
{
[HttpPost]
public async Task<ActionResult<Response>> AddUser([FromBody] Request request)
{
var _message = await DoSomething(request);
Response response = new Response
{
Message = _message
};
return response;
}
private async Task<string> DoSomething(Request request)
{
string msg = string.Format("Add user {0} to {2} is successful", request.User, request.FromRole, request.ToRole);
return msg;
}
}
}
@joshykautz 是對的,您可以為每個操作添加路由
另一種方法是更改 controller 路由而不是觸摸動作:
[Route("api/[controller]/[action]")]
public class ProjectController : ControllerBase
....
但在此之后,如果您需要,您仍然可以為某些操作分配一個非常特殊的路線,例如
[Route("~/api/Project/AddNewUser")]
public async Task<ActionResult<Response>> AddUser( Request request)
不要錯過“~/”。 它適用於 url
https://localhost:1234/api/Project/AddNewUser
給每個動作一個路由屬性。
[HttpPost]
[Route("api/[controller]/AddUser")]
public async Task<ActionResult<Response>> AddUser([FromBody] Request request)
{
var _message = await DoSomething(request);
Response response = new Response
{
Message = _message
};
return response;
}
請記住刪除您為 class 定義的路由屬性。
您也可以使用[Route("api/[controller]/[action]")]
因為您的方法已經命名為AddUser 。
[HttpPost]
[Route("api/[controller]/[action]")]
public async Task<ActionResult<Response>> AddUser([FromBody] Request request)
{
var _message = await DoSomething(request);
Response response = new Response
{
Message = _message
};
return response;
}
您可以在Microsoft Docs上閱讀更多信息。
我建議不要在路由中使用../adduser../updateuser../deleteuser。 它還會導致安全漏洞。
您可以將 API 構建為 /user 並添加;
yourrouter.route('/user/:id?')
.get(user.get)
.post(user.post)
.put(user.put)
.delete(user.delete);
對於相同的 /user 路線。
這意味着,客戶端使用特定請求(GET、POST、PUT 等)以及 ID 和其他參數(如果需要)調用相同的./user。
You can test your API and routing via POSTMAN, by selecting the method when you call the API (eg https://yourdomain/api/user/{parameters})
將[action]
標記添加到您的 controller 路線將產生您想要的路線格式:
[Route("api/[controller]/[action]")]
但是,我不鼓勵在路由命名中使用動詞。 HTTP 方法已經充分描述了調用給定端點時所采取的操作。
POST /api/user
創建一個新用戶。
GET /api/user
獲取用戶。
PUT /api/user/{id}
更新現有用戶。
DELETE /api/user/{id}
刪除用戶。
在 RESTful 方法中,路由描述了您在服務器上與之交互的資源,使用的 HTTP 方法描述了操作。 將動作/動詞混合到您的路線中違背了這種心態。
在您的情況下,我會做的是創建一個新的UserController
,它將包含您的用戶資源的端點。 將它們放在ProjectController
中,對我來說這聽起來像是應該處理項目、混合職責並使您的代碼難以理解的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.