部署 asp 网络核心 Web 应用程序后未找到 Web API 404
Web API 404 not found after deploy asp net core web application
我用 vs 2017 创建一个包含两个项目的解决方案:
- 1- 网页 Api
- 2- Asp .Net 核心 Web 应用程序,通过 angular 服务访问 WebApi 控制器。
我有一个 Web Api 控制器
[Route("api/[controller]/[action]")]
public class ClientController : Controller
{
// GET: api/Client/Get
[HttpGet]
public JsonResult Get()
{
ClientQuery _Query = new ClientQuery();
List<ClientLisModel> _Results = _Query.GetAll();
return new JsonResult(_Results);
}
在我的 angular 服务中,我创建了一个函数来访问此控制器操作:
this.getListeClient = function getListeClient() {
var deferred = $q.defer();
$http({
method: 'GET',
url: '/api/Client/Get'
})
.then(function (data) {
deferred.resolve(data);
})
.catch(function (msg, code) {
deferred.reject(msg);
$log.error(msg, code);
});
return deferred.promise;
}
当我 运行 我的 vs 2017 应用程序时,一切正常。 .但是当我将它部署到 iis 7.5 中的 MyWebSite 时。我有这个错误:
GET http://localhost/api/Client/Get 404 (Not Found)
它应该寻找 http://localhost/MyWebSite/api/Client/Get
我的Web.config是:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\Application.UI.Web.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
</system.webServer>
</configuration>
谢谢!
此问题的解决方案是在 anuglar 模块中使用配置。
所以在我的 angular js 模块中我添加了这一行:
(function () {
'use strict';
angular.module('clientApp', ['ui.bootstrap', 'smart-table']);
angular.module('clientApp').constant('config', {
apiUrl: 'http://localhost:55555',
baseUrl: '/',
enableDebug: true
});
})();
然后我像这样修改我的 angular js 服务:
angular
.module('clientApp')
.service("clientService", function (config, $http, $q) {
this.getListeClient = function getListeClient() {
var deferred = $q.defer();
$http({
method: 'GET',
url: config.apiUrl + '/api/Client/Get'
})
.then(function (data) {
deferred.resolve(data);
})
.catch(function (msg, code) {
deferred.reject(msg);
$log.error(msg, code);
});
return deferred.promise;
}
发布我的应用程序后,我只需修改 mu angularjs 模块中的 "apiUrl"。
我用 vs 2017 创建一个包含两个项目的解决方案:
- 1- 网页 Api
- 2- Asp .Net 核心 Web 应用程序,通过 angular 服务访问 WebApi 控制器。
我有一个 Web Api 控制器
[Route("api/[controller]/[action]")]
public class ClientController : Controller
{
// GET: api/Client/Get
[HttpGet]
public JsonResult Get()
{
ClientQuery _Query = new ClientQuery();
List<ClientLisModel> _Results = _Query.GetAll();
return new JsonResult(_Results);
}
在我的 angular 服务中,我创建了一个函数来访问此控制器操作:
this.getListeClient = function getListeClient() {
var deferred = $q.defer();
$http({
method: 'GET',
url: '/api/Client/Get'
})
.then(function (data) {
deferred.resolve(data);
})
.catch(function (msg, code) {
deferred.reject(msg);
$log.error(msg, code);
});
return deferred.promise;
}
当我 运行 我的 vs 2017 应用程序时,一切正常。 .但是当我将它部署到 iis 7.5 中的 MyWebSite 时。我有这个错误:
GET http://localhost/api/Client/Get 404 (Not Found)
它应该寻找 http://localhost/MyWebSite/api/Client/Get
我的Web.config是:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\Application.UI.Web.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
</system.webServer>
</configuration>
谢谢!
此问题的解决方案是在 anuglar 模块中使用配置。
所以在我的 angular js 模块中我添加了这一行:
(function () {
'use strict';
angular.module('clientApp', ['ui.bootstrap', 'smart-table']);
angular.module('clientApp').constant('config', {
apiUrl: 'http://localhost:55555',
baseUrl: '/',
enableDebug: true
});
})();
然后我像这样修改我的 angular js 服务:
angular
.module('clientApp')
.service("clientService", function (config, $http, $q) {
this.getListeClient = function getListeClient() {
var deferred = $q.defer();
$http({
method: 'GET',
url: config.apiUrl + '/api/Client/Get'
})
.then(function (data) {
deferred.resolve(data);
})
.catch(function (msg, code) {
deferred.reject(msg);
$log.error(msg, code);
});
return deferred.promise;
}
发布我的应用程序后,我只需修改 mu angularjs 模块中的 "apiUrl"。