我正在尝试在.NET Core 3.0 React应用程序中实现报告。我正在使用SQL Server Reporting Services(SSRS(进行报告。我希望在新的浏览器选项卡中打开一个基于打开选择值的报告。
这是javascript:
if ($('.ddDisposition option:selected').text() == 'Print') {
if (this.state.printUrl) {
window.open(this.state.printUrl, _blank);
}
}
我已经尝试了以下url值。state.printUrl:
/Report/DispositionPrint?id=ad2c916e-3a87-4697-81e4-768b58205f4d
/报告/处置打印/ad2c916e-3a87-4697-81e4-768b58205 f4d
控制器方法如下:
[HttpPost("{id}")] //Also tried [HttpGet]
[Route("DispositionPrint")]
public IActionResult DispositionPrint(Guid id)
{
string url = ssrsUrl + @"?/Project/DispositionPrint&Id=" + id.ToString() +
"&rs:Command=Render&rs:Format=PDF";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Uri.EscapeUriString(url)); ;
request.Method = "GET";
request.Credentials = nwc;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
var contenttype = response.Headers["Content-Type"];
return File(response.GetResponseStream(), contenttype);
}
我不关心控制器的逻辑,这很好。然而,我不知道如何让react前端使用这种方法
当前正在打开一个新选项卡,但从未执行DispositionPrint方法。
上面提到的state.printUrl都不能访问DispositionPrint方法。有什么想法吗?感谢
您的问题应该是传递了错误的url格式。并且Controller.File()
与[HttpGet]
一起工作,您应该将HTTP方法类型从[HttpPost]
更改为[HttpGet]
。
1.如果您的控制器路由配置如下:
[Route("[controller]")]
[ApiController]
public class TestController : ControllerBase
{
[HttpGet("{id}")]
[Route("DispositionPrint")]
public IActionResult DispositionPrint(Guid id)
{
}
使用this.state.printUrl作为Test/DispositionPrint
或Test/ad2c916e-3a87-4697-81e4-768b58205f4d
。
2.如果你通过了this.state.printUrl的/Test/DispositionPrint/ad2c916e-3a87-4697-81e4-768b58205f4d
,你应该更改路由设计,如图所示:
[HttpGet]
[Route("DispositionPrint/{id}")]
public IActionResult DispositionPrint(Guid id)
{}
参考:组合属性路由