Я пытаюсь создать многоуровневое приложение, в котором веб-API хранится в другой библиотеке классов. Я создал класс контроллера TestController в другой библиотеке классов, и мой код выглядит так:
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
namespace PkrUni.SMS.Api
{
[ApiController]
[Produces("application/json")]
[Route("api/[controller]")]
public class TestController : ControllerBase
{
public IEnumerable<string> Get()
{
return new string[] { "Chris", "Hadfield" };
}
}
}
Теперь мой вопрос заключается в том, как я могу получить доступ к этому веб-API в моем основном проекте. Я уже добавил ссылку на эту библиотеку классов в основной проект, но она не работает. Мой айпи не работает. Ошибка 404 Страница не найдена появляется при попытке доступа к API. Это структура моего проекта.
Что я делаю не так, пожалуйста, помогите мне.
Почему вы все равно поместили контроллеры в отдельный проект? Это на самом деле не требуется для приложения N-Tier.
Контроллер @mason Api находится только в другом проекте, но контроллер mvc находится в основном проекте. Плохо ли иметь контроллер API в другом классе?
Это не обязательно плохо. Но какое преимущество это дает вам? Я не могу думать ни о каком. И если это усложняет создание/запуск вашего приложения... Я думаю, вам следует подумать о положительных и отрицательных сторонах вашего подхода и решить, стоит ли оно того.
@mason Можете ли вы сказать мне, как вызвать веб-API, не открывая его на сетевой вкладке браузера.
Почему вы хотите это сделать?
@mason Потому что я не хочу показывать другим, как я потребляю свой API
Вы не хотите, чтобы другие могли использовать ваш веб-API? Кто является целевой аудиторией для него? Кто должен быть, чтобы поговорить с ним?
@mason, я просто хочу это знать. Возможно ли это
Я даже не знаю, о чем вы спрашиваете, поэтому не могу сказать, возможно это или нет. Пожалуйста, ответьте на мой вопрос: кто должен иметь возможность общаться с вашим веб-API? Какой код будет отвечать за вызов вашего веб-API?
Давайте продолжить обсуждение в чате.





Попробуйте установить пакет Microsoft.AspNetCore.Mvc в библиотеку классов бритвы.
И в startup.cs используйте:
services.AddMvc().AddApplicationPart(Assembly.Load(new AssemblyName("PkrUni.SMS.Area.Api")));
См. здесь.
Я тестирую ваш сценарий, создавая проект asp.net core2.2 MVC и библиотеку классов бритвы без каких-либо проблем. Ниже моя структура:
Возможно, это. На контроллеры ссылаются, но приложение не знает, что нужно искать контроллеры в какой-либо сборке, кроме своей собственной.