我對 C#、.NET 或 MVC 模式知之甚少,無法確切知道此處包含哪些相關內容,但我正在做一個非常簡單的更改。
我有一個帶有搜索操作(方法?)的控制器,如下所示:
public string Search(int id)
{
return $"The id was {id}";
}
當我到達路線時,我得到了預期的回應,例如
$ curl https://localhost:7180/Players/Search/1
The id was 1

但是當我將變數名更改為id其他名稱時,行為會發生變化,并且由于某種原因該值變為 0。
public string Search(int thing)
{
return $"The thing was {thing}";
}
$ curl https://localhost:7180/Players/Search/1
The thing was 0

我想也許它與模型本身有關,因為模型代碼至少有一個Id屬性
public class Player
{
public int Id { get; set; }
public string? Name { get; set; }
}
但是將該變數重命名為name(看起來類似)也無濟于事。
那么我在這里缺少什么概念?為什么我不能將該變數重命名為我想要的任何內容?提前致謝!
(我不知道如何更好地傳達代碼的所有不同方面,所以這里是專案內部有問題的行的鏈接)
uj5u.com熱心網友回復:
默認情況下,MVC 注冊(參見Program或Startup)下一個默認路由,因此它可以將id方法的引數系結為路徑的位置部分:
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
您可以更改引數名稱,例如使用屬性路由:
[Route("[controller]/search/{thing}")]
public string Search(int thing)
{
return $"The thing was {thing}";
}
或者使用HTTP 動詞模板:
[HttpGet("[controller]/search/{thing}")]
public string Search(int thing)
{
return $"The thing was {thing}";
}
檢查鏈接的檔案以獲取其他選項/詳細資訊。
uj5u.com熱心網友回復:
我相信這與您定義路線的方式有關Program.cs:
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
您需要像這樣添加一個新定義:
app.MapControllerRoute(
name: "default",
pattern: "Players/Search/{thing?}");
或者,您可以使用基于屬性的路由定義來使路由模式定義更接近實際代碼。有關詳細資訊,請參閱MSFT 檔案。基本上,添加app.MapControllers();到Program.cs,然后對于您的個人路線,執行以下操作:
[Route("Players/Search/{thing}")]
public string Search(int thing)
{
return $"The thing was {thing}";
}
uj5u.com熱心網友回復:
您可以裝飾方法并定義引數。
// GET api/values/5
[HttpGet("{id}")]
public virtual async Task<ActionResult<IEntity>> Get(string id)
{
var entity = await Repository.GetEntity(x => x.Id == id);
if (entity == null) return NotFound();
return Ok(entity);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/531584.html
