带有React的.NET Core 3-如何打开新选项卡来显示文档



我正在尝试在.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/DispositionPrintTest/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)
{}

参考:组合属性路由

最新更新