部署asp net core web应用程序后找不到Web API 404

时间:2017-06-10 01:53:30

标签: angularjs asp.net-web-api asp.net-core-1.1

我使用vs 2017创建一个包含两个项目的解决方案:

  • 1- Web Api
  • 2- Asp .Net核心Web应用程序,通过角度服务访问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);
    }

在我的角度服务中,我创建了一个访问此控制器操作的函数:

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;
            }

当我从2017年开始运行我的应用程序时,一切正常。但是当我在iis 7.5中将它部署到MyWebSite时。我有这个错误:

  

获取http://localhost/api/Client/Get 404(未找到)

它应该寻找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>

谢谢!

1 个答案:

答案 0 :(得分:0)

此问题的解决方案是在anuglar模块中使用config。

所以在我的角度js模块中,我添加了这一行:

(function () {
    'use strict';

    angular.module('clientApp', ['ui.bootstrap', 'smart-table']);

    angular.module('clientApp').constant('config', {
        apiUrl: 'http://localhost:55555',
        baseUrl: '/',
        enableDebug: true
    });
})();

我修改我的角度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”。