Включить CORS на моем веб-API не работает - PullRequest
0 голосов
/ 20 мая 2018

У меня есть следующий веб-API, самостоятельно подключенный:

public class ApiShell : IApiShell
    {
        private IActorSystemSettings _settings;
        public ApiShell(IActorSystemSettings settings)
        {
            _settings = settings;
        }

        IDisposable _webApp;

        public void Start()
        {
            _webApp = WebApp.Start<Startup>(_settings.SystemUrl);
            Console.WriteLine($"Web server running at '{_settings.SystemUrl}'");
        }

        public void Stop()
        {
            _webApp.Dispose();
        }

        internal class Startup
        {
            //Configure Web API for Self-Host
            public void Configuration(IAppBuilder app)
            {
                var config = new HttpConfiguration();
                config.EnableCors();

                config.MapHttpAttributeRoutes();
                //default route
                config.Routes.MapHttpRoute(
                    name: "DefaultApi",
                    routeTemplate: "api/{controller}/{id}",
                    defaults: new { id = RouteParameter.Optional });

                config
                  .EnableSwagger(c => c.SingleApiVersion("v1", "Web API"))
                  .EnableSwaggerUi();

                app.UseWebApi(config);

                config.DependencyResolver = new AutofacWebApiDependencyResolver(IoC.Container);

            }
        }
    }

Как только я хотел бы включить Cors, добавив следующую строку, config.EnableCors(); мой веб-API больше не доступен через Swaggerи я получаю следующий ответ:

<Error>
<Message>An error has occurred.</Message>
<ExceptionMessage>
The object has not yet been initialized. Ensure that HttpConfiguration.EnsureInitialized() is called in the application's startup code after all other initialization code.
</ExceptionMessage>
<ExceptionType>System.InvalidOperationException</ExceptionType>
<StackTrace>
at System.Web.Http.Routing.RouteCollectionRoute.get_SubRoutes() at System.Web.Http.Routing.RouteCollectionRoute.GetRouteData(String virtualPathRoot, HttpRequestMessage request) at System.Web.Http.HttpRouteCollection.GetRouteData(HttpRequestMessage request) at System.Web.Http.Dispatcher.HttpRoutingDispatcher.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) at System.Net.Http.DelegatingHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) at System.Web.Http.HttpServer.<SendAsync>d__24.MoveNext()
</StackTrace>
</Error>

Я попытался установить HttpConfiguration.EnsureInitialized(), но это приводит к следующей ошибке:

Не удалось загрузить файл или сборку 'Система.Web.Cors, версия = 5.2.3.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35 'или одна из ее зависимостей.Системе не удается найти указанный файл. '

Я установил следующую версию Microsoft.AspNet.WebApi.Cors

Install-Package Microsoft.AspNet.WebApi.Cors.cs-Версия 5.2.3

Как включить CORS в моем веб-интерфейсе?

Ответы [ 2 ]

0 голосов
/ 20 мая 2018

вы можете включить corse на следующем примере

using System.Web.Http;
using System.Web.Http.Cors;

[EnableCors(origins: "*", headers: "*", methods: "*")]
public class EvalSamplesController : ApiController
{
    [HttpGet]
    public List<EvalSamplesViewModel> GetHeaderList()
    {
        List<EvalSamplesViewModel> simpleModel = obj.ReadAllList();
        return simpleModel;
    }
}

и в app_start в WebApiConfig поставить следующую строку в методе Register

public static void Register(HttpConfiguration config)
    {
      config.EnableCors();
     ///////// 
    }
0 голосов
/ 20 мая 2018

Вы забыли сказать AppBuilder использовать cors.

Попробуйте добавить следующую строку в метод конфигурации запуска

app.UseCors(CorsOptions.AllowAll);
...