I'm trying to list incoming messages by category so in UI part when admin click on category, then in the controller, the Id
shows up as zero.
I sent to Id
number of categories to related urls but couldn't read the value of Ids in controller.
<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();
}
}
The post didn't contain the route declaration. But it's necessary to define proper route declaration by using conventional route (see Set up conventional route) or by using the Route attribute:
[Route("[controller]/[action]/{categoryId}")]
public async Task<IActionResult> InboxByCategory(int categoryId)
{
....
}
In case your application already contains the "default"
route declaration generated by template
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
you can just change the action method parameter name from categoryId
to id
:
public async Task<IActionResult> InboxByCategory(int id)