据我所知。每次webapi请求发送到服务器时,都会进行身份验证。我的应用程序使用WebAPI 2, Identity 2和get方法,如:
/api/cityStatusList
/api/cityTypeList
/api/cityOptionList
这些调用的存在是为了获取页的数据。
如果webapi对每个请求都进行身份验证,那么我应该考虑如何将所有这些请求合并为一个吗?
如果webapi对每个请求都进行身份验证,那么我应该考虑如何将所有这些请求合并为一个吗?
怎么了,有什么麻烦吗?
你当然可以像这样定义并返回一个类:
public class CityData
{
public List<CityStatus> StatusList { get; set; }
public List<CityType> TypeList { get; set; }
public List<CityOption> OptionList { get; set; }
}
为您的城市创建CityView模型类,如下:
public class CityView
{
public List<cityStatusView> cityStatusList { get; set; }
public List<cityTypeView> cityTypeList { get; set; }
public List<cityOptionView> cityOptionList { get; set; }
}
public class cityStatusView
{
public int ID { get; set; }
}
public class cityTypeView
{
public int ID { get; set; }
}
public class cityOptionView
{
public int ID { get; set; }
}
在你的web API中使用如下代码:
// View model
var cityStatusList=..;
var cityTypeList=..;
var cityOptionList=..;
CityView objVM = new CityView();
objVM.cityStatusList = cityStatusList;
objVM.cityTypeList = cityTypeList;
objVM.cityOptionList = cityOptionList;
return ActionContext.Request.CreateResponse(HttpStatusCode.OK, objVM);
要直接解决这个问题—是的,它每次都对您的应用程序进行身份验证。然而,在标准web应用程序的规模上,这一次你甚至不用担心它是微不足道的。
将这些路由合并为一个可能是一个好主意,不是因为身份验证必须多次发生,而是因为web请求可能只需要一段时间。通常,这是由于通过TCP/IP将信号从服务器物理发送到客户端所花费的时间(并重新发送以补偿任何丢失的数据包)。即使在并行处理请求时,更少的web请求也会更快。
话虽这么说,默认情况下,我会尽可能做最简单的事情,而不担心它。我刚才提到的是一个优化,应该这样对待,而不是过早地做。
至于认证?这只是你的网络请求的超级马拉松的几步,真的无关紧要。如果我错了,有人会纠正我,但我认为它通常甚至不会击中数据库-它所要做的就是解码以加密安全方式存储在身份验证cookie中的声明。