ASP.Net Core和AngularJS:如何根据数据库记录获得动态路由/内容?

时间:2017-05-02 14:31:59

标签: c# asp.net angularjs routing asp.net-core

我试图建立一个系统,其中第一个URL子目录将是动态的,但也可以作为对页面上显示的动态内容的查询。这可能吗?

例如,用户可以输入如下地址:

http://localhost:8885/chase/

http://localhost:8885/bank-of-america/

http://localhost:8885/.../

我如何能够将查询绑定到chasebank-of-america并使用动态内容填充页面,如果记录存在,否则重定向到"默认"查看"此页面DNE"。

让我们说AppController.cs像这样处理这些查询:

public JsonResult DirectoryQuery(string subDomain) {
    return _context.Banks
        .Where(t => t.ExtName == subDomain)
        .FirstOrDefault();
}

然后,我的角度控制器进行查询,如下所示:

app.controller('AppController', function ($scope, $location, LookupService) {

    var urlString = $location.path();

    (function() {
        LookupService.CheckURL(urlString).then(function(data) {
            if (data == null) {
                window.location.pathname = '404';
            }
            else {
                console.log('This page exists');
            }
        }
    })();
})
.factory('LookupService', function($http) {
    var LookupServiceData = {};

    LookupServiceData.CheckURL = function(data) {
        return $http({
            url: '/App/DirectoryQuery',
            method: 'POST',
            data: JSON.stringify(data),
            headers: {'content-type'" 'application/json'}
        });
    };

    return LookupServiceData;
});

我正在使用MapRoute ASP.Net Core配置,但并不确切知道如何设置它。这是我到目前为止的想法,(位于Configure的{​​{1}}方法中:

Startup.cs

注意:我没有在任何地方定义app.UseMvc(config => { config.MapRoute( name: "Default", template: "{bank?}/{controller?}", defaults: new { controller = "App", action = "Index" } ); }); ,也不知道这是否是正确的术语。

如果某人有通过AngularJS而不是C#的路由解决方案,我也会对此开放!有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

如果是我,我会将您的ASP地图路线模板设置回原始默认值:template: "{controller=Home}/{action=Index}/{id?}")并专门为您的银行请求创建一个控制器,如下所示:

[Route("Bank")]
public class BankController : Controller
{
    private IBankService BankService;

    public BankController(IBankService bankService) {
        BankService = bankService ?? new IBankService();
    }


    [HttpGet("{bankStringId}")]
    public string Index(string bankStringId)
    {
        var result = someServiceMethod(bankStringId);
        return result;
    }

}

添加路由的Bank部分会在调用您的应用路由和银行API呼叫之间消除歧义。然后,在您的AngularJS应用程序中,让您的服务使用以下格式的URI调用控制器:http://localhost:8885/bank/chase/