gpt4 book ai didi

c# - 带有 oData V4 客户端生成器的 AADL

转载 作者:行者123 更新时间:2023-12-03 04:35:02 26 4
gpt4 key购买 nike

我正在尝试使用 Azure Active Diretory 库在 Web 应用程序和 OData V4 WebApi 之间实现身份验证。我使用 SQL 来对用户进行身份验证,因此,我不需要使用 AADL 对他们进行身份验证,只需对应用程序进行身份验证即可。我在互联网上看到了几个演示,但没有一个做这种事情。主要问题是我的 Web 应用程序正在使用 OData 客户端生成器,因此我不需要打开 HttpClient 请求来调用我的 API,我只需使用上下文来执行此操作。考虑到这种情况,如何保护我的 odata api 仅供我的 Web 应用程序使用?这是我的代码的一些示例。

我的 odata Controller 之一

using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Threading.Tasks;
using System.Web.Http;
using System.Web.OData;
using VPNUX.Model;

namespace VPNUX.API.Controllers
{

public class EstadosController : ODataController
{
private readonly DB_VPNUX _db = new DB_VPNUX();

[EnableQuery]
public IHttpActionResult GetEstados()
{
return Ok(_db.ESTADOS);
}
}
}

这是我在网络应用程序中调用此 Controller 的方式

public ApiContext ApiContext = new ApiContext(new Uri(ConfigurationManager.AppSettings["ApiUrl"]));

_consultaViewData.PacienteViewData.Estados =
ApiContext.Estados
.Select(estado => new ListItem(estado.NOME, estado.ID))
.ToList();

一切都直接来 self 的 OData Client .cs 文件

这是我第一次使用 odata,它效果很好,但我需要保护我的 API。

谢谢

最佳答案

要在 OData 客户端中使用基本身份验证,您可以通过以下方式在 DataServiceContext 中设置凭据

var serviceCreds = new NetworkCredential("Administrator", "SecurePassword"); 
var cache = new CredentialCache();
var serviceUri = new Uri("http://localhost/SimpleService");
cache.Add(serviceUri, "Basic", serviceCreds);
ApiContext.Credentials = cache;

, 或者您可以使用 DataServiceContext.SendingRequest2 设置 header 。

ApiContext.SendingRequest2 += (sender, arg) =>
{
arg.RequestMessage.SetHeader("HeaderName", "HeaderValue");
};

关于c# - 带有 oData V4 客户端生成器的 AADL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26922370/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com