代码之家  ›  专栏  ›  技术社区  ›  Oğuzhan

我将Id发送到正确的url,但在控制器中,我始终读取Id=0

  •  1
  • Oğuzhan  · 技术社区  · 11 月前

    我试图按类别列出传入消息,因此在UI部分,当管理员单击类别时,然后在控制器中 Id 显示为零。

    我发送到 身份证件 相关url的类别数,但无法读取控制器中Id的值。

    <div class="list-group mail-list">
        <a href="/AdminContact/InboxByCategory/2" class="list-group-item border-0"><span class="fa fa-briefcase f-s-14 mr-2"></span>Şikayet</a>
        <a href="/AdminContact/InboxByCategory/1" class="list-group-item border-0"><span class="fa fa-sellsy f-s-14 mr-2"></span>Teşekkür</a>
        <a href="/AdminContact/InboxByCategory/4" class="list-group-item border-0"><span class="fa fa-ticket f-s-14 mr-2"></span>Talep</a>
        <a href="/AdminContact/InboxByCategory/3" class="list-group-item border-0"><span class="fa fa-tags f-s-14 mr-2"></span>Öneri</a>
    </div>
    
    public class AdminContactController : Controller
    {
         private readonly IHttpClientFactory _httpClientFactory;
    
         public AdminContactController(IHttpClientFactory httpClientFactory)
         {
             _httpClientFactory = httpClientFactory;
         }
    
         public async Task<IActionResult> InboxByCategory(int categoryId)
         {
             var token = HttpContext.Session.GetString("AuthToken");
    
             if (string.IsNullOrEmpty(token))
             {
                 return Unauthorized();
             }
    
             var client = _httpClientFactory.CreateClient();
             client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
    
             var response = await client.GetAsync($"http://localhost:10881/InboxListByCategory/{categoryId}");
    
             if (response.IsSuccessStatusCode)
             {
                 var jsonData = await response.Content.ReadAsStringAsync();
                 var values = JsonConvert.DeserializeObject<List<InboxContactDto>>(jsonData);
                 return View("Inbox", values);
             }
    
             return View("Inbox");
         }
    
         public async Task<IActionResult> Inbox()
         {
             var token = HttpContext.Session.GetString("AuthToken");
    
             if (string.IsNullOrEmpty(token))
             {
                 return Unauthorized();
             }
    
             var client = _httpClientFactory.CreateClient();
             client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
    
             var response = await client.GetAsync("http://localhost:10881/InboxList");
    
             if (response.IsSuccessStatusCode)
             {
                 var jsonData = await response.Content.ReadAsStringAsync();
                 var values = JsonConvert.DeserializeObject<List<InboxContactDto>>(jsonData);
                 var contactCount = await GetContactCount();
                 ViewBag.ContactCount = contactCount;
                 ViewBag.SendMessageCount = await GetSendMessageCount();
                 return View(values);
             }
    
             return View();
         }
    }
    
    1 回复  |  直到 11 月前
        1
  •  0
  •   Victor    11 月前

    帖子中没有路线声明。但是,有必要使用常规路由定义正确的路由声明(参见 Set up conventional route )或通过使用 Route 属性

    [Route("[controller]/[action]/{categoryId}")]
    public async Task<IActionResult> InboxByCategory(int categoryId)
    {
      ....
    }
    

    如果您的应用程序已经包含 "default" 由模板生成的路由声明

    app.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
    

    您可以从以下位置更改操作方法参数名称 categoryId id :

    public async Task<IActionResult> InboxByCategory(int id)