ASP.NETコアアプリケーションにAPIコントローラがあります。ASP.NETコアの間違ったAPI URL
[Route("api")]
public class UserController : Controller
{
[HttpGet("{userName}/product_info")]
public IActionResult GetProductInfo(string userName)
{
List<ProductInfo> productInfos = _repo.GetProductInfoByUserName(userName);
if (productInfos.Count > 0)
return Ok(productInfos);
else
return BadRequest("Unable to process requrest");
}
}
/api/{username}/product_info
を使用して上記APIを呼び出すことができます。 ユーザーが間違ったURLを入力した場合、UseStatusCodePagesWithRedirects()
を使用して404ページにリダイレクトしています。ここでの問題は、私が/api/{username}/product_o
のような間違ったAPIのURLを使用した場合です。 404ページにリダイレクトされ、ステータスコード200が返されます。このAPIはangular.jsとともに使用しています。 APIは状態コード200の間違ったURLの404ページを返すので、then
メソッドのエラー機能は$http
と呼ばれることはありません。response.data
には404ページのHTMLがあります。誤ったAPI URLが呼び出されたとき404の状態コードを返し、間違ったNON API URLが呼び出されたときに通常の404ページを返すにはどうすればよいですか? 以下は、間違ったAPI URLを呼び出したときのスクリーンショットです。 startup.cs
作品のconfigure
方法における次の部分を追加this link に@Daboul提案し、溶液に基づく
。
Func<HttpContext, bool> isApiRequest = (HttpContext context) => context.Request.Path.ToString().Contains("/api/");
app.UseWhen(context => !isApiRequest(context), appBuilder =>
{
appBuilder.UseStatusCodePagesWithRedirects("~/Error/{0}");
});
私はangular.jsを初めて使っていますので、JavaScriptの面ではあまりできません。 ASP.NET側では、StatusCodePagesを使用してAPIコントローラを除外するためにどのようなミドルウェアを使用する必要がありますか?この問題は、APIコントローラに 'Authorize'属性を追加した場合にも発生します。ログインせずにAPIにアクセスしようとすると 'Authorize'属性が追加された後、200のステータスコードを持つログインページが返されます。このため、 'Authorize'属性を削除しなければなりませんでした。 –
UseWhen()がその作業を行います。ここで例を見つけることができます:http://stackoverflow.com/questions/37841270/branching-asp-net-core-pipeline-authentication UseWhen()をURLの条件と組み合わせて使用する 'context.Request.Path .StartsWithSegments( "/ API /") ' – Daboul
あなたのUpdate1バージョンでは、app.UseWhen(context =>!isApiRequest(context)、appBuilder => { app.UseStatusCodePagesWithRedirects("〜/ Error/{0} "); (0)」); }); 'switch app for 'は、appButtonを使用しているため、 appbuilder。 – Daboul