Почему 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();
});