C#/.NET 后端解决跨域问题和依赖注入

1、以ASP.NET Core WebApi项目(Programs.cs)为例

builder.Services.AddControllers(); 
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

# region 依赖注入问题 
// 依赖注入
builder.Services.AddSingleton<IUserBll, UserBll>();
builder.Services.AddSingleton<IPostsBll, PostsBll>();
# endregion 

# region 跨域问题
// AllowAnyOrigin() 允许所有的ip地址可以访问
builder.Services.AddCors(options =>
{
    options.AddPolicy("AllowSpecificOrgin",
        builder => builder.WithOrigins("http://localhost:8085")
        .AllowAnyMethod()
        .AllowAnyHeader()); // 限制云讯本地:8085允许访问
    options.AddPolicy("any", p => p.AllowAnyHeader().AllowAnyOrigin().AllowAnyMethod()); // 允许任何ip访问
});

# endregion

var app = builder.Build();
 
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

// 添加运行通过的路由配置
app.UseCors("AllowSpecificOrgin");
app.UseCors("any");

app.UseHttpsRedirection();

app.UseAuthorization();

app.MapControllers();

app.Run();

2、指定某控制器使用跨域

 [Route("[controller]/[action]")]
 [ApiController]
 [EnableCors("any")] //可通过这种方法指定控制器的跨域,也可不指定全局使用
 public class LoginController : ControllerBase{
     [HttpGet("{userNo}/{passWord}")]
    public MyBBSDB_Users GetLoginRes(string userNo, string passWord)
    {
        return null;    
    }
 }

3、依赖注入(定义接口和实现)

// 接口
public interface IUserBll
{
    List<MyBBSDB_Users> GetUserByUserNoAndPassword(string userNo, string password);

    List<MyBBSDB_Users> GetUserByUserNoAndAutoLoginTag(string userNo, Guid autoLoginTag); 
}
....
// 实现
public class UserBll : IUserBll
{
    private UserDal userDal = new UserDal(); // 数据访问层(三层架构)

    /// <summary>
    /// 根据用户名和密码查询用户
    /// </summary>
    /// <param name="userNo"> </param>
    /// <param name="password"> </param>
    /// <returns> </returns>
    public List<MyBBSDB_Users> GetUserByUserNoAndPassword(string userNo, string password)
    {
        return userDal.GetUserByUserNoAndPassword(userNo, password);
    }

    /// <summary>
    /// 根据账号名和token获取用户信息
    /// </summary>
    /// <param name="userNo"> </param>
    /// <param name="autoLoginTag"> </param>
    /// <returns> </returns>
    public List<MyBBSDB_Users> GetUserByUserNoAndAutoLoginTag(string userNo, Guid autoLoginTag)
    {
        return userDal.GetUserByUserNoAndAutoLoginTag(userNo, autoLoginTag);
    }
    ...
}

4、在Programs.cs注册依赖注入

builder.Services.AddSingleton<IUserBll, UserBll>();
builder.Services.AddSingleton<IPostsBll, PostsBll>();

5、在控制器API中使用

[Route("[controller]/[action]")]
[ApiController]
[EnableCors("any")]  
public class LoginController : ControllerBase
{
    private readonly IUserBll _iUserBll;

    /// <summary>
    /// 通过依赖注入的接口
    /// </summary>
    /// <param name="iUserBll"> </param>
    public LoginController(IUserBll iUserBll)
    {
        _iUserBll = iUserBll;
    }
    ...
    [HttpPost]
    public string Insert(MyBBSDB_Users users)
    {
        users.UserLevel = 0;
        users.IsDelete = false;
        users.Password = users.Password.ToMd5();
        return _iUserBll.AddUsers(users) > 0 ? "添加成功!" : "添加失败!";
    }
}
  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值