Почему Visual Studio пропускает некоторые каталоги, такие как Controllers, Classes и App_Start, при публикации в Azure?

У меня есть классический веб-сайт на основе форм ASP.Net, на который я добавил набор обращений к API на основе класса OAuthAuthorizationServerProvider. Он отлично работает локально, теперь я пытаюсь опубликовать его в службе приложений Azure. Часть веб-сайта ASP.Net работает отлично, без проблем. Но есть 2 очевидные проблемы с API-интерфейсом сайта. 1) По умолчанию каталоги Classes, Controllers и App_Start не передаются в службу приложений при публикации веб-сайта. 2) После ручной публикации недостающих каталогов служба API не отвечает на обращения. POST http://test.azurewebsites.net/api/v1/token отвечает ошибкой 404 (не найдено).

Я знаю, что кто-то спросит содержимое файлов App_Start, так что вот они.

RouteConfig.cs

      using System.Collections.Generic;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using Microsoft.AspNet.FriendlyUrls;

namespace App_Start
{
    public static class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            var settings = new FriendlyUrlSettings();
            settings.AutoRedirectMode = RedirectMode.Permanent;
            routes.EnableFriendlyUrls(settings);

            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                    name: "Default",
                    url: "{controller}/{action}/{id}",
                    defaults: new { action = "Index", id = UrlParameter.Optional }
                );  
        }
    }
}

Startup.cs

      using Microsoft.Owin;
using Microsoft.Owin.Cors;
using Microsoft.Owin.Security.OAuth;
using Owin;
using System;

[assembly: OwinStartup(typeof(App_Start.Startup))]

namespace App_Start
{
    public partial class Startup
    {
        public void Configuration(IAppBuilder App)
        {
            App.UseCors(CorsOptions.AllowAll);
            OAuthAuthorizationServerOptions options = new OAuthAuthorizationServerOptions
            {
                TokenEndpointPath = new PathString("/api/v1/token"),
                Provider = new ApiAuthProvider(),
                AccessTokenExpireTimeSpan = TimeSpan.FromDays(5),
                //AllowInsecureHttp = true
            };

            App.UseOAuthAuthorizationServer(options);
            App.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
        }
    }
}

WebApiConfig.cs

      using System.Collections.Generic;
using System.Linq;
using System.Web.Http;

namespace App_Start
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            config.MapHttpAttributeRoutes();

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

Я не думаю, что мне что-то не хватает при запуске для обращений к API, но это, скорее всего, причина моей второй проблемы.

Спасибо, Расс

1 ответ

По умолчанию каталоги Classes, Controllers и App_Start не передаются в службу приложений при публикации веб-сайта.

я развернулASP.NetВеб-API для службы приложений Azure. Даже я не могу видеть папки контроллеров, классов и файлов конфигурации.

Когда мы развертываем веб-приложение, все исходные файлы компилируются вdllфайлы.

Развернутая структура папок введите описание изображения здесь

введите описание изображения здесь

Нет необходимости загружать все файлы и папки вручную.

POST http://test.azurewebsites.net/api/v1/token отвечает ошибкой 404 (не найдено).

Нам нужно включить маршрутизацию в методе Configure() в файле.

ВStartup.cs, добавьте следующие строки

       app.UseRouting();
 app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });