我正在开发一个后端Web API应用程序,应该由角度前端应用程序调用。 当我尝试从角度应用程序发出请求以获取有关当前登录用户的信息时,我收到错误:
获取http://localhost:57693/api/Users/me 404(未找到)
按摩:
"您要查找的资源已被删除,名称已更改或暂时不可用。 Web服务器上不存在指定的目录或文件。 该网址包含印刷错误。"
这是我在角度项目中的调用javascript函数:
function requestUserProfile() {
var userProfileDeferred = $q.defer();
$http.get(BASE_URL + 'Users/me')
.then(function (loggedInUser) {
currentUser = loggedInUser;
deferred.resolve(currentUser);
userProfileDeferred.resolve();
},
function (error) {
deferred.reject(error);
$location.path('/');
});
return userProfileDeferred.promise;
}
其中BASE_URL = 'http://localhost:57693/api/';
。
Web API项目中的c#控制器如下:
[EnableCors(origins: "*", headers: "*", methods: "*")]
[RoutePrefix("Users")]
public class UsersController : ApiController
{
private readonly IUsersService _service;
public UsersController()
{
this._service = new UsersService();
}
// GET: api/Users/5
[HttpGet]
[Route("me")]
public IHttpActionResult Get()
{
System.IO.File.WriteAllText(@"D:\In.txt", "");
var viewModel = this._service.GetCurrentUser();
return this.Ok(viewModel);
}
}
我也在
中进行了以下配置public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
GlobalConfiguration.Configuration.Formatters.JsonFormatter.Indent = true;
ConfigureMapper();
}
}
以便在RouteConfig.RegisterRoutes(RouteTable.Routes)之前放置WebApiConfig.Register。
WebApiConfig具有以下结构:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.EnableCors();
// Web API configuration and services
// Configure Web API to use only bearer token authentication.
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
// Web API routes
config.MapHttpAttributeRoutes();
}
}
我还在Web.config文件中进行了以下更改:
<configSections>
....
<section name="rewriter" requirePermission="false" type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter" />
</configSections>
.............
<connectionStrings>
<add name="IssueTrackingSystem" connectionString="data source=(LocalDb)\MSSQLLocalDB;initial catalog=IssueTrackingSystem;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
</connectionStrings>
<httpModules>
.....
<add type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter" name="UrlRewriter" />
</httpModules>
...................
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
.................................
<dependentAssembly>
<assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
.............................
<rewriter>
<redirect url="~/Default.aspx" to="~/Default" />
<redirect url="~/Login.aspx" to="~/Login" />
</rewriter>
</configuration>
当我尝试提出请求时,它并没有到达c#控制器,尽管我认为这条路线是正确的。 有人知道问题出在哪里以及我如何修复它以便从角度应用程序向WebAPI应用程序发出有效请求?
角度应用程序之前已经与另一个WebAPI一起使用并且工作正常。
提前致谢!