繁体   English   中英

为 asp.net 内核在 controller 中路由之前确定 URL

[英]Determine URL prior to routing in controller for asp.net core

I am developing an asp.net core site, and I have a controller class which gets data for an api that I am using (jquery datatable).

客户端控制器.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Threading.Tasks;
using GuptaAccounting.Data;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Extensions;
using Microsoft.AspNetCore.Mvc;

namespace GuptaAccounting.Controllers
{
    //Need to add the route so server knows which path/url to go to
    [Route("api/Client")]
    //State that this is an api controller
    [ApiController]
    public class ClientController : Controller
    {
        private readonly ApplicationDbContext _db;

        public ClientController(ApplicationDbContext db)
        {
            _db = db;
        }

        [HttpGet]
        public IActionResult GetAll()
        {
            return Json(new
            {
                data = _db.Client.Where(Client => Client.IsConsultationClient == false).ToList()
            });
        }
    }
}

在路由到“api/client”之前,我需要知道我在站点上的位置,以便我可以在 GetAll function 中返回不同的数据(返回 IsConsultationClient == true 的客户端)。 我该怎么做? 我已经尝试过使用IHttpContextAccessor并且我没有任何运气。

[编辑]

我正在从 js 文件进行 ajax 调用。 这是我的代码的一部分

 dataTable = $('#DT_load').DataTable({ //need to make an ajax call using the api that i included "ajax": { "url": "/api/client", //this is a get request "type": "GET", "datatype": "json" },

也许这会奏效。

在 controller 中:

[HttpGet]
[MyRouter]
public IActionResult GetAll(bool isConsultationClient = false)
{
    return Json(new
    {
        data = _db.Client
            .Where(Client => Client.IsConsultationClient == isConsultationClient).ToList()});
    }
}

在属性过滤器中:

public class MyRouterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        if (context.HttpContext.Request.Headers
                .TryGetValue("IsConsultationClient", out var isConsultationClient))
        {
            if (isConsultationClient== "Yes")
                context.ActionArguments.Add("isConsultationClient", true);
            else if (isConsultationClient== "No")
                context.ActionArguments.Add("isConsultationClient", false);
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM