Может ли класс контроллера MVC asp.net возвращать Action Method и Json оба? - PullRequest
0 голосов
/ 27 марта 2019

Спасибо за ваше время, у меня есть простой вопрос, в приложении asp.net MVC, внутри контроллеров, возможно ли, что наряду с некоторыми методами, возвращающими View (ActionMethods), другие могут действовать как (или возвращать) Json как веб-API(может вызываться из внешних приложений).

Просто пытаюсь сделать правильное разделение, следовательно, пытаюсь понять.

Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 27 марта 2019

, хотя можно иметь методы контроллера, которые возвращают только данные Json, существует ряд соображений, когда вы хотите предоставить эти данные за пределами приложения пользовательского интерфейса.

Поскольку у вас есть приложение MVC, я ожидаю, что у вас есть пользователи и способ входа в систему. Ваши контроллеры, скорее всего, будут каким-то образом защищены, что работает для внутренних пользователей приложения. Теперь вы хотите добавить один метод, который фактически становится API, доступным вне приложения, и вызовы к нему должны будут как-то аутентифицироваться.

Я бы предложил разделить это. Вы можете создать отдельный проект, который является WebAPI, в том же решении. Код, который подготавливает данные, может находиться в библиотеке классов, на которую можно ссылаться как в проектах MVC, так и в WebAPI.

Ваше приложение MVC может вызвать его, а затем вернуть представление с этими данными, WebAPI вызывает его и просто возвращает данные. Теперь вы можете выбрать способ защиты своего API, возможно, с помощью Identity Server или каким-либо другим способом, и вы можете продолжать добавлять к нему что-либо, не затрагивая уровень пользовательского интерфейса.

Ваш второй вариант - заставить приложение MVC использовать API, когда ему необходимо получить данные, чтобы и ваши публичные клиенты, и пользовательский интерфейс использовали одно и то же.

Какой бы вариант вы ни использовали, идея состоит в том, чтобы ничего не дублировать и в то же время предоставлять нужные вам уровни безопасности.

0 голосов
/ 27 марта 2019

Вы можете сделать функцию действия как API.Попробуйте что-то вроде этого.

// Controller/Action
[HttpGet]
public ActionResult IAmSpecial()
{
    if (Request.IsAjaxRequest())
    {
        string[] objects = new string[] { "Foo", "Bar" };

        return Json(objects);
    }

    return View();
}

Это вернет представление IAmSpecial, если вы перейдете к {domain}/{Controller}/IAmSpecial, в то время как оно вернет результат JSON, если вы используете запрос Get AJAX Http по тому же URL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...