Return a 404 on need view if need doesn't exist.

This incurs an extra GET request, but means we don't redirect to a
non-existent URL. If the API adapters don't already get around the
duplicate request with caching, we should be able to fix that if it's an
issue.

Also, once we have separate view and edit actions, this won't be an
issue any more.
Merge remote-tracking branch 'origin/404-on-view'