C# ASP.NET核心MVC Web API部署问题
我正在尝试使用Web API部署我的ASP.NET核心MVC Web应用程序,也就是说,我在同一文件夹中有MVC和API控制器 它在本地主机上运行良好,但在IIS上创建虚拟目录时,路径会添加到域中 我可以使用C# ASP.NET核心MVC Web API部署问题,c#,asp.net-mvc,asp.net-core,asp.net-web-api,C#,Asp.net Mvc,Asp.net Core,Asp.net Web Api,我正在尝试使用Web API部署我的ASP.NET核心MVC Web应用程序,也就是说,我在同一文件夹中有MVC和API控制器 它在本地主机上运行良好,但在IIS上创建虚拟目录时,路径会添加到域中 我可以使用window.location.pathname 我可以附加“api/Get”,它的工作原理类似(questions是我的虚拟目录) 但当我导航到其他页面时,控制器名称也会被追加,然后会导致问题 e、 g.如果我导航到“问题”页面(QuestionController),URL将变为 htt
window.location.pathname
我可以附加“api/Get”,它的工作原理类似(questions
是我的虚拟目录)
但当我导航到其他页面时,控制器名称也会被追加,然后会导致问题
e、 g.如果我导航到“问题”页面(QuestionController
),URL将变为
http://example.com/questions/newquestion/api/Question/Create
而不是
http://example.com/questions/api/Question/Create
我怎样才能修好它
这是我的Asp.Net核心api
[ApiController]
public class ScheduleController : ControllerBase
{
[HttpGet]
public List<PathologistSchedule> GetPathologistScheduleByDate(DateTime taskDate)
{
return pathologistRepository.GetPathologistScheduleByDate(taskDate).ToList();
}
}
[ApiController]
公共类ScheduleController:ControllerBase
{
[HttpGet]
公共列表GetPathLogistScheduleByDate(日期时间任务日期)
{
返回pathologistRepository.GetPathologistScheduleByDate(taskDate).ToList();
}
}
我使用jquery从PathologistScheduleController的视图调用此api
下面是我得到的错误:
得到http://localhost:51434/PathologistSchedule/api/Schedule/?sort=&group=&filter=&taskDate=2020-11-13T21%3A16%3A47.507Z 404(未找到)
蒂亚
A如果在一个解决方案中有API和MVC项目,则必须配置解决方案以运行多个项目 您可以对每个API使用这样的路由属性
[Route("~/api/Question/GetAll")]
将为您提供Urlhttp://example.com/api/Question/GetAll
或
将给出Urlhttp://example.com/api/Question/Create
它将不依赖于控制器名称或文件夹
由于问题更新而更新更新:
请使用此代码:
public class ScheduleController : ControllerBase
{
[Route("~/api/Schedule/GetPathologistScheduleByDate/{taskDate?}")]
public List<PathologistSchedule> GetPathologistScheduleByDate(DateTime taskDate)
{
return pathologistRepository.GetPathologistScheduleByDate(taskDate).ToList();
}
}
但对于API,基本上不需要使用任何控制器或操作名称。您可以使用任何喜欢的名称,例如:
[Route("~/api/Pathologist/GetSchedule/{taskDate?}")]
or
[Route("~/api/GetPathologistSchedule/{taskDate?}")]
or even
[Route("~/api/{taskDate?}")]
路由应该是唯一的。我在“appsettings.json”和“appsettings.Development.json”中添加了一个名为baseURL的变量,并将“appsettings.json”设置为“/VirtualDirectoryName/”,并将“appsettings.Development.json”中的变量保留为“/”。
调用api时附加了这个变量。它不起作用,我添加了如下路由:[route(“~/api/[controller]”)。我修改了我的问题,添加了一些代码示例。请检查。我不确定使用:[Route(“~/api/[controller]”是否是个好主意。为了测试,请尝试隐式地使用[Route(“~/api/Question/GetAll”)]来执行GetAll操作,等等。不要把任何默认的路线放在控制器的顶部。我刚刚看到你的新代码,它与我建议的完全不同。如果你不听劝告,它就会起作用。这是代码。我会尝试你的建议并让你知道。谢谢。我尝试了你的方法,但我的本地版本中仍然有404。你的问题在
窗口中。位置。路径名
。显示您的客户端代码。
public class ScheduleController : ControllerBase
{
[Route("~/api/Schedule/GetPathologistScheduleByDate/{taskDate?}")]
public List<PathologistSchedule> GetPathologistScheduleByDate(DateTime taskDate)
{
return pathologistRepository.GetPathologistScheduleByDate(taskDate).ToList();
}
}
http://localhost:51434/api/Schedule/GetPathologistScheduleByDate/2020-11-13T21%3A16%3A47.507Z
[Route("~/api/Pathologist/GetSchedule/{taskDate?}")]
or
[Route("~/api/GetPathologistSchedule/{taskDate?}")]
or even
[Route("~/api/{taskDate?}")]