是一个有点历史的B/S项目。前后端分离,前台用JQUERY的AJAX获取后台返回值的结构。后台是C#写的。
一般情况下是不考虑更换了,但现在国家推进自主化,所以为了今后可以迁移到非WINDOWS服务器上,又考虑到技术统一性,所以打算从FRAMEWORK迁移到CORE上。
稍微学习了一下CORE,觉得应该后台CORE应该用API控制器就能解决实现低成本更换了。
自己试了试,发现了一个问题,不知道怎么解决,或者说不知道问题出在哪里。
资料里都写,项目中添加一个控制器,然后直接在类库上的路由里写规则就可以了。如下:
[Route("api/DAL")]
[ApiController]
public class ValuesController : ControllerBase
{
[HttpPost("Return1")]
public static String Return1()
{
return "12333";
}
}
比如这样,那么前台在调接口的时候AJAX就按 url:"http://localhost:43776/api/DAL/Return1" 这么调用就可以了。
但我试了都是404错误。不太明白,网上查了都在说跨域问题。我用POSTMAN也试过了,也是404 ,请各位指点一下。
IDE用的VS2019,就是用的最原始的创建模板。
源于chatGPT仅供参考,404不是跨域问题是你前端请求的地址不对:一般的是服务器ip:端口/api/控制器/接口,看你的地址没有看到控制器
从您提供的代码来看,有几个问题需要注意:
1. 静态方法问题:在控制器中定义的操作方法不能是静态的。请将`Return1`方法改为实例方法,如下所示:
```csharp
[Route("api/DAL")]
[ApiController]
public class ValuesController : ControllerBase
{
[HttpPost("Return1")]
public string Return1()
{
return "12333";
}
}
Startup.cs
文件中的Configure
方法进行设置。确保已经正确配置了路由规则,可以参考以下示例:public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// 其他中间件配置代码...
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers(); // 添加API控制器路由
});
}
上述示例中的endpoints.MapControllers()
会自动扫描项目中的API控制器并设置路由规则。
IActionResult
类型,以支持更灵活的结果返回和异常处理。在您的示例中,可以将返回类型从string
改为IActionResult
,并使用Ok
方法返回字符串结果,如下所示:public IActionResult Return1()
{
return Ok("12333");
}
通过以上修改,您的API控制器应该能够正确地返回字符串结果。请确保已经安装了所需的NuGet包,并按照ASP.NET Core的最佳实践进行配置和开发。如果您遇到其他问题,请提供更多细节以便我们能够更好地帮助您解决问题。
```
是不能用静态的关系…去掉静态字符串就AJAX就可以获取到了…POSTMAN报跨域了。
谢谢~~这个细节网上没有提到,我也是习惯性的用了静态的方法。
后面一个路由配置我是查到的,也配了。
不知道你这个问题是否已经解决, 如果还没有解决的话:问题分析: 根据问题描述,由于将B/S项目从Framework迁移到Core时遇到了API调用问题。在迁移后,前端无法通过AJAX调用后台API接口,返回404错误。有可能是跨域问题导致的。下面是解决跨域问题的具体步骤。
解决方案: 1. 配置后台API项目支持CORS跨域访问:
在Core项目中,可以通过在Startup.cs文件中配置CORS中间件来实现支持跨域访问。
在ConfigureServices方法中添加以下代码:
services.AddCors(options =>
{
options.AddPolicy("AllowOrigin",
builder => builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader());
});
在Configure方法中添加以下代码:
app.UseCors("AllowOrigin");
在DALController的Return1方法上添加[EnableCors]特性,指定允许的来源和方法。
[HttpGet("Return1")]
[EnableCors("AllowOrigin")]
public IActionResult Return1()
{
// 实现返回数据的逻辑
}
将前端AJAX调用的URL修改为后台API项目的基地址:
$.ajax({
method: "GET",
url: "http://localhost:<后台API项目端口号>/api/DAL/Return1",
success: function(data) {
// 处理返回的数据
},
error: function(xhr, textStatus, errorThrown) {
// 显示错误信息
}
});
注意替换<后台API项目端口号>为后台API项目实际的端口号。
这些步骤应该能够解决跨域访问问题。如果仍然遇到问题,请提供更多详细的错误信息,有助于进一步排查和解决。