【问题标题】:How do I use ui-router authentication with Asp.Net?如何在 Asp.Net 中使用 ui-router 身份验证?
【发布时间】:2015-11-27 16:14:55
【问题描述】:

我正在尝试将 ASP.Net 5.0 与 AngularJS 与 Active Directory 集成,但在访问“/api/Account/Ping”时不断收到 404 错误。

ui-router 设置:

app.config(['$stateProvider', '$urlRouterProvider', '$locationProvider',
    function ($stateProvider, $urlRouterProvider, $locationProvider) {

        $urlRouterProvider.otherwise("/list");

        $locationProvider.hashPrefix('!').html5Mode({
            enabled: true,
            requireBase: false
        });

        $stateProvider
        .state('stateIndex', {
                    url: '/',
                    templateUrl: '/templates/list.html',
                    controller: 'dashListController'     
        })
        .state('stateList', {
                    url: '/list',
                    templateUrl: '/templates/list.html',
                    controller: 'dashListController'
        }).state('stateDashboard', {
                    url: '/dashboard',
                    templateUrl: '/templates/dashboard.html',
                    controller: 'dashboardController'
        })
        .state('stateWidgetsList', {
                    url: '/widgetsList',
                    templateUrl: '/templates/widgetsList.html',
                    controller: 'widgetsListController',
                    resolve: {
                        authentication: ['$http', function ($http) {
                            return $http.get('api/Account/Ping');
                        }]
                    }
        });
}]);

帐户控制器:

[RoutePrefix("api/Account")]
public class AccountController : ApiController
{
    [Authorize] 
    [HttpGet, Route("Ping")]
    public IHttpActionResult Ping()
    {
        return Ok();
    }
}

小部件控制器:

[Route("api/[controller]")]
public class WidgetsController : Controller
{
    private readonly PMSContext _dbContext;

    public WidgetsController(PMSContext dbContext)
    {
        _dbContext = dbContext;
    }

    [Authorize]
    [HttpGet]
    public IEnumerable<Widget> Get()
    {
        return _dbContext.Widgets;
    }
}

我正在使用拦截器将其路由到登录屏幕。但每次我尝试访问 /widgetsList 时都会收到 404 错误。我在这里错过了什么?

【问题讨论】:

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


    【解决方案1】:

    您应该从 templateUrl: '/templates/widgetsList.html' 中删除 / 并且应该是 templateUrl: 'templates/widgetsList.html'

    【讨论】:

    • 感谢您的回答。如果我删除 resolve: { ... },它会正确返回页面。所以问题不在于路由到 widgetsList.html。和api/Account/Ping有关,返回404
    • 你能发布你在控制台中得到的完整的 404 错误吗?
    • 是 url 中漏掉的 webapps 中的基本文件夹名称。应该像 localhost:46899/{{deployed folder name}}/api/Account/Ping
    • 我没有部署文件夹和其他Api的作品,只有这个没有
    猜你喜欢
    • 2017-05-07
    • 2016-07-27
    • 1970-01-01
    • 2019-04-11
    • 2017-12-31
    • 2016-08-25
    • 2015-12-04
    • 2019-03-05
    • 2019-01-28
    相关资源
    最近更新 更多